ldd用法

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用法

在通常情况下,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)

上一篇:定义字符串的左旋转操作,把字符串前面的若干个字符移动到字符串的尾部。如把字符串abcdef左旋转2位得到字符串cdefab,请实现字符串左旋转函数。


下一篇:力扣 - 剑指 Offer 47. 礼物的最大价值