假设您有符号的名称(已解构或未解构)以及动态链接到其他符号的库的名称,您想找出哪个库能够解析该符号。
我尝试使用nm
,objdump
但readelf
我找不到关于它的好的文档,看起来使用这个工具是不可能的。
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 输出来找到你需要的任何信息。
您可以在任何精灵对象上调用链接器,包括库:
LD_DEBUG=symbols,bindings /lib/ld-linux-x86-64.so.2 /lib/libm.so.6