LDD - Linux手册页
Linux程序员手册 第1部分
更新日期: 2019-03-06
名称
ldd-打印共享对象依赖性
语法
ldd [选项] ...文件...
说明
ldd打印命令行上指定的每个程序或共享库所需的共享库(共享库)。其用法和输出示例如下:
$ ldd /bin/ls linux-vdso.so.1 (0x00007ffcc3563000) libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f87e5459000) libcap.so.2 => /lib64/libcap.so.2 (0x00007f87e5254000) libc.so.6 => /lib64/libc.so.6 (0x00007f87e4e92000) libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f87e4c22000) libdl.so.2 => /lib64/libdl.so.2 (0x00007f87e4a1e000) /lib64/ld-linux-x86-64.so.2 (0x00005574bf12e000) libattr.so.1 => /lib64/libattr.so.1 (0x00007f87e4817000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f87e45fa000)
在通常情况下,ldd调用标准动态链接器(请参阅ld.so(8)),并将LD_TRACE_LOADED_OBJECTS环境变量设置为1。这将导致动态链接器检查程序的动态依赖关系,并根据( ld.so(8))并加载满足这些依赖关系的对象。对于每个依赖项,ldd显示匹配对象的位置以及加载该对象的(十六进制)地址。 (linux-vdso和ld-linux共享依赖项是特殊的;请参见vdso(7)和ld.so(8)。)
Security
请注意,在某些情况下(例如,程序指定了ld-linux.so以外的ELF解释器),某些版本的ldd可能会尝试通过尝试直接执行程序来尝试获取依赖项信息,这可能会导致执行无论是在程序的ELF解释器中定义的任何代码,都可能与程序本身的执行有关。 (例如,在2.27之前的glibc版本中,上游的ldd实现做到了这一点,尽管大多数发行版都提供了修改后的版本,但没有)。
因此,永远不要对不受信任的可执行文件使用ldd,因为这可能会导致执行任意代码。处理不受信任的可执行文件时,更安全的选择是:
$ objdump -p /path/to/program | grep NEEDED
但是请注意,这种选择仅显示可执行文件的直接依赖关系,而ldd显示可执行文件的整个依赖关系树。
选项
- --version
- 打印ldd的版本号。
- -v, --verbose
- 打印所有信息,包括符号版本控制信息。
- -u, --unused
- 打印未使用的直接依赖项。 (从glibc 2.3.4开始。)
- -d, --data-relocs
- 执行重定位并报告所有丢失的对象(仅ELF)。
- -r, --function-relocs
- 对数据对象和函数执行重定位,并报告所有丢失的对象或函数(仅ELF)。
- --help
- 使用信息。
BUGS
ldd在a.out共享库上不起作用。
ldd不能与在将ldd支持添加到编译器版本中之前构建的某些非常老的a.out程序一起使用。如果您在这些程序之一上使用ldd,该程序将尝试以argc = 0运行,结果将不可预测。
出版信息
这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。