扫描可执行文件的动态库依赖项

时间:2015-11-18 21:40:19

标签: dynamic shared-libraries

我想获得一个可执行文件需要加载才能运行的动态库列表。我想以编程方式执行此操作(即,我不会询问有关运行ldd)的信息。我看到了各种工具,例如libtool,但不清楚是否有可能将它们用于此目的;如果是,那么如何。

1 个答案:

答案 0 :(得分:1)

您的问题是针对特定操作系统的,并且您没有说出您感兴趣的操作系统。

假设您对ELF感兴趣,可以阅读可执行文件的.dynamic部分,查找.d_tag == DT_NEEDED条目。这些条目的.d_ptr将包含.dynstr部分的偏移量,其中包含所需共享库的名称。您可以通过运行readelf -d a.out来查看此解码版本。

一旦你知道需要哪些库,你就必须复制ld.so的搜索规则才能真正找到它们(一般来说这会非常复杂),然后为每个库重复这个过程。图书馆依次。

  

是否有支持正确执行此操作的库?

任何这样的库很快就会过时,除非它是装载器本身的一部分。此功能 由加载程序通过ldd提供。

所以你应该三思而后行避免ldd(它究竟有什么问题?)