打印定义给定符号的库的名称

时间:2014-05-01 02:24:29

标签: c++ symbols objdump nm readelf

假设您有一个符号的名称(取消或不符号)以及动态链接到其他库的库名称,您想要找出哪个库能够解析该符号。

我尝试使用nmobjdumpreadelf但我无法找到有关它的良好文档,看起来这个工具无法实现。

gdb提供了类似的东西,但它是一个调试器,我需要快速查找的东西,你知道怎么做而不启动调试会话吗?

1 个答案:

答案 0 :(得分:1)

您可以使用ld-linux.so.2的调试工具来查找elf对象中的符号解析(示例适用于amd64,动态加载程序名称反映了这一事实):

 LD_DEBUG=symbols,bindings /lib/ld-linux-x86-64.so.2 /bin/ls

上面会打印到曲调的行:

 60157:     symbol=fclose;  lookup in file=/bin/ls [0]
 60157:     symbol=fclose;  lookup in file=/lib64/librt.so.1 [0]
 60157:     symbol=fclose;  lookup in file=/lib64/libcap.so.2 [0]
 60157:     symbol=fclose;  lookup in file=/lib64/libacl.so.1 [0]
 60157:     symbol=fclose;  lookup in file=/lib64/libc.so.6 [0]
 60157:     binding file /bin/ls [0] to /lib64/libc.so.6 [0]: normal symbol `fclose' [GLIBC_2.2.5]

然后你可以grep输出以找到你需要的任何信息。

您可以在任何elf对象上调用链接器,包括以下库:

LD_DEBUG=symbols,bindings /lib/ld-linux-x86-64.so.2 /lib/libm.so.6