1、ldd不是一个可执行程序,而是一个shell脚本。

zlf@ubuntu:~/$ which ldd
/usr/bin/ldd
zlf@ubuntu:~/$ file /usr/bin/ldd
/usr/bin/ldd: Bourne-Again shell script, ASCII text executable

2、ldd能够显示可执行模块的dependency,其原理是通过设置一系列的环境变量,如:LD_TRACE_LOADED_OBJECTS、LD_WARN、LD_BIND_NOW、LD_LIBRARY_VERSION、 LD_VERBOSE等。当LD_TRACE_LOADED_OBJECTS环境变量不为空时,任何可执行程序在运行时,它都会只显示模块的 dependency,而程序并不真正执行。比如:

export LD_TRACE_LOADED_OBJECTS

无效。

zlf@ubuntu:~/$ export LD_TRACE_LOADED_OBJECTS=

zlf@ubuntu:~/$ export LD_TRACE_LOADED_OBJECTS=

zlf@ubuntu:~/$ export LD_TRACE_LOADED_OBJECTS=

均可使其生效,运行ls命令显示如下:

zlf@ubuntu:~/$ ls
linux-gate.so. => (0xb77b2000)
libselinux.so. => /lib/i386-linux-gnu/libselinux.so. (0xb777a000)
librt.so. => /lib/i386-linux-gnu/librt.so. (0xb7771000)
libacl.so. => /lib/i386-linux-gnu/libacl.so. (0xb7767000)
libc.so. => /lib/i386-linux-gnu/libc.so. (0xb75bd000)
libdl.so. => /lib/i386-linux-gnu/libdl.so. (0xb75b8000)
/lib/ld-linux.so. (0xb77b3000)
libpthread.so. => /lib/i386-linux-gnu/libpthread.so. (0xb759d000)
libattr.so. => /lib/i386-linux-gnu/libattr.so. (0xb7597000)

撤销环境变量:

 zlf@ubuntu:~/$ unset LD_TRACE_LOADED_OBJECTS

3、ldd显示可执行模块的dependency的工作原理,其实质是通过ld-linux.so(elf动态库的装载器)来实现的。开始执行程序后,ld-linux.so模块会先于executable模块程序工作,并获得控制权,因此当上述的那些环境变量被设置时,ld-linux.so选择了显示可执行模块的dependency。

4、实际上可以直接执行ld-linux.so模块,如:/lib/ld-linux.so.2 --list program(相当于ldd program)。

最新文章

  1. 关于C中内存操作
  2. 推荐15款响应式的 jQuery Lightbox 插件
  3. 【BZOJ 3642】Phi的反函数
  4. Karma 5:集成 Karma 和 Angular2
  5. 获取dom元素的宽度和高度
  6. acm算法模板(4)
  7. ODBC错误处理
  8. iOS - UI - UIScrollView
  9. 【转】如何高效利用GitHub——2013-08-28 22
  10. java web-----servelet
  11. (转) IOS用CGContextRef画各种图形(文字、圆、直线、弧线、矩形、扇形、椭圆、三角形、圆角矩形、贝塞尔曲线、图片)
  12. [Twisted] transport
  13. sed 批量替换多个文件里的某个字符/串
  14. Alexandra and Prime Numbers(思维)
  15. UML-状态图,顺序图,活动图
  16. vue.js 常用语法总结(一)
  17. 2018年3月份的PTA(一)
  18. 微软Telnet的回显功能开启
  19. 关于Linux虚拟化技术KVM的科普 科普三(From OenHan)
  20. java 判断是否为中文字符,部分,。中文符号不能识别

热门文章

  1. [转]分析zookeeper能做什么
  2. Linux中Tomcat 自动设置CATALINA_HOME方法
  3. docker---Dockerfile编写
  4. 第一次 C语言课程设计
  5. Maven相关:mvn的配置和简单命令
  6. iOS 通过有alpha值的图片创建蒙版
  7. DOCKER 学习笔记6 WINDOWS版尝鲜
  8. thrift生成c++服务端和客户端
  9. jq轮播图
  10. 深度学习数据集MNIST ImageNet COCO PASCAL VOC介绍