gpt4 book ai didi

c - 如何在 linux 中使用链接寄存器(如 backtrace_symbol)从函数地址检索函数名称

转载 作者:太空狗 更新时间:2023-10-29 11:17:55 25 4
gpt4 key购买 nike

我想编写 C 程序(如回溯)我正在获取函数的地址,但我不知道如何将这些地址转换为符号(函数名称)。请帮助我

最佳答案

第一个答案是符号处理是一个隐藏的内部 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

关于c - 如何在 linux 中使用链接寄存器(如 backtrace_symbol)从函数地址检索函数名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36685976/

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