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

print the name of the library that defines a given symbol

本文关键字:符号 定义 打印      更新时间:2023-10-16

假设您有一个符号的名称(是否有解映射(和一个动态链接到其他符号的库的名称,那么您需要找出哪个库能够解析该符号。

我尝试使用nmobjdumpreadelf,但找不到关于它的好文档,看起来用这些工具是不可能的。

gdb提供了类似的功能,但它是一个调试器,我需要一些快速查找的功能,你知道如何在不启动调试会话的情况下做到这一点吗?

您可以使用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