ldd 显示一组链接的库,但使用 rabin2 -l 显示不同。为什么会这样?

ldd 显示一组链接的库,但使用 rabin2 -l 显示不同。为什么会这样?

在尝试调试某些内容时,我注意到它ldd <executable>会显示一堆库,例如libldap_rlibkrb5libroken等。另一方面,arabin2 -l <executable>不显示同一组库。

我已在源目录中查找来自链接或函数调用的 ldap 字符串,但它们没有显示,这意味着无论如何都不应该链接这些库。我应该怎么做才能查明这些库是否正在被使用?

答案1

rabin2 -l显示二进制文件的直接依赖关系,IE那些在二进制文件本身中列出的内容。ldd显示二进制文件的完全解析的依赖关系树(尽可能);这包括传递依赖。因此,如果一个二进制文件需要libalibb,并且liba需要libd它本身需要libe,rabin2 -l将仅列出libalibb,而ldd将显示所有四个库(如果它们都可用)。

您可以通过列出第一个二进制文件的依赖项,然后列出每个单独的依赖项的依赖项,依此类推,直到没有识别出新的依赖项为止,ldd手动匹配 的结果。rabin2 -l

要查明某个库是否实际被使用,您可以ltrace在您关心的所有场景中使用二进制文件。这将识别所调用的库函数。请注意,某些库的使用将取决于配置;例如,Kerberos 库可能仅在配置了 Kerberos 的情况下才会使用。

也可以看看ldd 与 rpm -q --requires

相关内容