ldd
NAME
ldd - 打印共享对象依赖项
USAGE
ldd [OPTION] ... FILE ...
OPTIONS
- –help 打印帮助信息并退出
- –version 打印版本信息并退出
- -d, --data-relocs 执行重定位并报告任何丢失的对象(仅限ELF)。
- -r, --function-relocs 对数据对象和函数执行重新定位,并报告任何缺少的对象或函数(仅限ELF)。
- -u, --unused 打印未使用的直接依赖项
- -v, --verbose 打印所有信息。比如,包含的符号版本信息。
DESCRIPTION
ldd会打印命令行上指定的每个程序或共享对象所需的共享对象(共享库)。 其使用和输出示例如下:
在通常情况下,ldd会将环境变量LD_TRACE_LOADED_OBJECTS
的值设置为1并调用标准动态链接器(请参见ld.so(8))。这会导致动态链接器检查程序的动态依赖关系,并根据ld.so(8)中描述的规则查找和加载满足这些依赖关系的对象。对于每个依赖项,ldd会显示匹配对象的位置以及加载该对象的(十六进制)地址。(linux-vdso和ld-linux共享依赖项是特殊的;请参阅vdso(7)和ld.so(8)。)
SECURITY
请注意,在某些情况下(例如,程序指定的ELF解释器不是ld-linux.so),ldd的某些版本可能会试图通过直接执行程序来获取依赖信息,这可能会导致执行该程序ELF解释器中定义的任何代码,也许还会执行程序本身。
因此,永远不要在不受信任的可执行文件上使用ldd,因为这可能会导致执行任意代码。在处理不受信任的可执行文件时,更安全的选择是:
$ objdump -p /path/to/program | grep NEEDED
然而,请注意,这个替代方案只显示可执行文件的直接依赖关系,而ldd显示可执行文件的整个依赖关系树。
BUGS
ldd不适用于a.out共享库。
ldd不适用于在发行的编译器支持ldd之前已经被构建的程序。如果在这样的程序上使用ldd,该程序将尝试以argc = 0运行,结果将不可预测。
SEE ALSO
pldd(1), sprof(1), ld.so(8), ldconfig(8)