假设我有一个__builtin_return_address(0)获取的地址。
稍后我想将其转换为coreResponding函数名。
There's dladdr(3)仅适用于动态库。
是否有任何方法接收任何符号的函数(可能通过libunwind、backrace_symbol()等)?

最佳答案

使用调试信息(-g)编译所有代码(甚至可能是使用的一些共享库)。注意,GCC允许使用-g和一些优化标志,如-O2(当然,在这种情况下,调试信息是“近似”)。所以你可以用gcc -Wall -g -O2等编译代码。。。。
然后使用最近版本的GCC中包含的Ian Taylor的libbacktrace
顺便说一下,dladdrbacktrace_symbol也可以工作(但我建议使用libbacktrace,因为它正在解析DWARF信息)。并且dladdr(3)对可执行文件本身的符号起作用。您可能需要使用-rdynamic标志链接可执行文件。
还请注意,在“可执行文件”(仅包含全局符号)中,“符号”(特别是函数)不存在。还要注意ELF函数staticattribute

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

10-10 17:53