LDD - Linux手册页

时间:2019-08-20 17:58:33  来源:igfitidea点击:

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运行,结果将不可预测。

另外参见

pldd(1),sprof(1),ld.so(8),ldconfig(8)

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/