Linux 二进制可执行文件属性:ldd 替代方案?

Ran*_*all 6 linux libraries

Linux ldd 命令可以显示可执行文件使用的动态库。这是一个 bash 脚本。但它似乎很脆弱,并且不适用于某些二进制文件。有替代工具吗?

在我的具体示例中,我可以使用:

% 文件 datab2txt

datab2txt:ELF 64 位 LSB 可执行文件,x86-64,版本 1 (SYSV),静态链接,用于 GNU/Linux 2.4.0,未剥离

但 ldd 失败:

% ldd -v datab2txt

不是动态可执行文件

Ric*_*lka 9

你也可以这样做:

readelf -d executable | grep NEEDED
Run Code Online (Sandbox Code Playgroud)

但这可能不会做你想要的。它显示executable链接到的库,但不是它需要的所有库(一个库可能需要另一个库)。


use*_*686 6

输出file说“静态链接”。ldd仅适用于动态链接的可执行文件。

(从技术上讲,Linuxldd所做的只是/lib/ld-linux.so.2在设置环境变量后调用 Linux 可执行加载程序。所以它应该是最可靠的方法。)

一些程序可能dlopen()用于加载库,以避免使程序硬依赖于它们。例如,Glibc 以这种方式加载 NSS 库,因为它们的名称仅在运行时已知,而不是在编译/链接时已知。