gpt4 book ai didi

linux - 将地址转换为函数名

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

假设我有一个通过 __builtin_return_address(0) 获取的地址。稍后我想将它翻译成一个对应的函数名。

dladdr(3) 仅适用于动态库。有什么方法可以接收任何符号的函数(可能是通过 libunwind、backrace_symbol() 等)?

最佳答案

使用调试信息 (-g) 编译您的所有代码(甚至可能是您使用的一些共享库)。注意 GCC允许使用both -g 和一些优化标志,如-O2(当然,在这种情况下,调试信息是“近似值”) .因此,您可以使用 gcc -Wall -g -O2 等编译代码....

然后也许使用 Ian Taylor 的 libbacktrace它包含在最新版本的 GCC 中。

顺便说一句,dladdrbacktrace_symbol 也可能有效(但我建议使用 libbacktrace,因为它正在解析 DWARF 信息)。和 dladdr(3)确实对可执行文件本身的符号起作用。您可能需要使用 -rdynamic 标志链接您的可执行文件。

还要注意 static 符号(特别是 static 函数)在 ELF 中“并不真正存在”可执行文件(只有 global 符号保留在其中)所以 dladdr 不能给它们。还要注意 visibility函数 attributepragma .

关于linux - 将地址转换为函数名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42089214/

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