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