打印共享对象依赖
命令语法格式
ldd [option]… file…
命令描述
命令ldd打印命令行上指定的每个程序或共享对象所需的共享对象(共享库)。它的使用和输出的一个例子如下:
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解释器中定义”的任何代码,也许是程序本身的执行)。 因此,您不应该对不受信任的可执行文件使用ldd,因为这可能导致执行任意代码。 处理不受信任的可执行文件时更安全的替代方法是:objdump -p /path/to/program | grep NEEDED
命令支持的选项及含义
-u, –unused
打印未使用的直接依赖项。(自glibc 2.3.4。)
-d, –data-relocs
执行重定位,并报告任何丢失的对象(仅限ELF)。
-r, –function-relocs
对数据对象和函数执行重定位,并报告任何缺少的对象或函数(仅限ELF)。
-v, –verbose
打印所有的信息,比如,包括符号的版本信息。
–version
显示ldd的版本信息。
–help
显示使用信息。
注意事项
命令ldd不适用于a.out共享库。
命令ldd不适用于在将ldd支持添加到编译器版本之前构建的一些极其旧的a.out程序。 如果在其中一个程序上使用ldd,程序将尝试使用argc=0运行,结果将无法预测。
相关手册
pldd(1), sprof(1), ld.so(8), ldconfig(8)
This page is part of release 4.10 of the Linux man-pages project. A description of the project, information about reporting bugs, and the latest version of this page, can be found at https://www.kernel.org/doc/man-pages
参考文献
- man 1 ldd, Version 2.27-3
更新日志
- 11/15/2018 创建文章