Linux 二进制可执行属性:ldd 替代品?

Linux 二进制可执行属性:ldd 替代品?

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

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

% 文件数据b2txt

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

但 ldd 失败:

%ldd-v datab2txt

不是动态可执行文件

答案1

您还可以这样做:

readelf -d executable | grep NEEDED

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

答案2

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

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

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

相关内容