我想知道我的系统上的可执行文件使用了哪些库。更具体地说,我想对使用最多的库以及使用它们的二进制文件进行排名。我该怎么做呢?


当前回答

我没有ldd在我的ARM工具链,所以我使用objdump:

$ (CROSS_COMPILE) objdump - p

例如:

objdump -p /usr/bin/python:

Dynamic Section:
  NEEDED               libpthread.so.0
  NEEDED               libdl.so.2
  NEEDED               libutil.so.1
  NEEDED               libssl.so.1.0.0
  NEEDED               libcrypto.so.1.0.0
  NEEDED               libz.so.1
  NEEDED               libm.so.6
  NEEDED               libc.so.6
  INIT                 0x0000000000416a98
  FINI                 0x000000000053c058
  GNU_HASH             0x0000000000400298
  STRTAB               0x000000000040c858
  SYMTAB               0x0000000000402aa8
  STRSZ                0x0000000000006cdb
  SYMENT               0x0000000000000018
  DEBUG                0x0000000000000000
  PLTGOT               0x0000000000832fe8
  PLTRELSZ             0x0000000000002688
  PLTREL               0x0000000000000007
  JMPREL               0x0000000000414410
  RELA                 0x0000000000414398
  RELASZ               0x0000000000000078
  RELAENT              0x0000000000000018
  VERNEED              0x0000000000414258
  VERNEEDNUM           0x0000000000000008
  VERSYM               0x0000000000413534

其他回答

其他答案忽略了一个重要的问题:

共享库既可以直接链接,也可以通过另一个库间接链接。

仅适用于直接链接:

objdump——private-headers "${bin}" | grep 'NEEDED' | cut——delimiter=' ' ' ——字段= 18岁

所有:

LDD "${bin}" | cut——fields=2 | cut——delimiter=' '——fields=1 | rev | cut——delimiter='/'——fields=1 | rev | sort——unique——version-sort

在UNIX系统上,假设二进制(可执行)名称为test。然后我们使用下面的命令列出测试中使用的库

ldd test

在OS X上默认没有ldd, objdump或lsof。作为替代,尝试otool -L:

$ otool -L `which openssl`
/usr/bin/openssl:
    /usr/lib/libcrypto.0.9.8.dylib (compatibility version 0.9.8, current version 0.9.8)
    /usr/lib/libssl.0.9.8.dylib (compatibility version 0.9.8, current version 0.9.8)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1213.0.0)

在本例中,使用哪个openssl填充给定可执行文件和当前用户环境的完全限定路径。

检查程序可执行文件的共享库依赖关系

要找出特定可执行文件所依赖的库,可以使用ldd命令。这个命令调用动态链接器来查找可执行文件的库依赖关系。

>$ldd /path/to/program

注意,不建议使用任何不受信任的第三方可执行文件运行ldd,因为某些版本的ldd可能直接调用可执行文件来识别其库依赖关系,这可能存在安全风险。

相反,更安全的显示未知应用程序二进制程序的库依赖关系的方法是使用以下命令。

$ objdump -p /path/to/program | grep需要

更多信息

要了解二进制文件使用的库,请使用LDD

ldd path/to/the/tool

您必须编写一个小shell脚本来处理系统范围的故障。