我想写c程序(比如回溯)我得到了函数的地址,但我不知道如何将这些地址转换为符号(函数名)。请帮帮我
答案 0 :(得分:1)
第一个答案是符号处理是隐藏的内部ABI。有些操作系统甚至在内核空间中执行此魔术。但你显然想要ARM + linux。
首先需要的信息是将地址映射回原点。您可以从此处检索此映射:/ proc / self / stat
下一部分更棘手,将这些文件的偏移转换为符号。为此,您需要解析ELF文件。如果您不想解析二进制数据,可以欺骗并使用objdump并解析ASCII格式的数据
http://man7.org/linux/man-pages/man5/elf.5.html
objdump -t -T -r -R /lib/x86_64-linux-gnu/libnss_files-2.19.so
如果你想要比这更多的细节信息,你将需要解析包含调试信息的部分(如果存在) - 它可能被移动到一个单独的文件以允许apt拥有那些漂亮的-dbg包,但是可能是很多工作的方式,而且更容易破解gdb或从像valgrind这样的项目中提取代码。
PS:如果您的用例是在出现问题时执行调试/诊断,我建议使用valgrind