![Linux 二进制可执行属性:ldd 替代品?](https://linux22.com/image/1269673/Linux%20%E4%BA%8C%E8%BF%9B%E5%88%B6%E5%8F%AF%E6%89%A7%E8%A1%8C%E5%B1%9E%E6%80%A7%EF%BC%9Aldd%20%E6%9B%BF%E4%BB%A3%E5%93%81%EF%BC%9F.png)
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 库,因为它们的名称仅在运行时才为人所知,而不是在编译/链接时。