gpt4 book ai didi

c++ - 打印定义给定符号的库的名称

转载 作者:太空宇宙 更新时间:2023-11-04 11:34:21 25 4
gpt4 key购买 nike

假设您有一个符号的名称(demangled 与否)和动态链接到其他库的名称,您想要找出哪个库能够解析该符号。

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

gdb 提供类似的东西,但它是一个调试器,我需要一些东西来快速查找,你知道如何在不启动调试 session 的情况下执行此操作吗?

最佳答案

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

 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

关于c++ - 打印定义给定符号的库的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23401160/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com