我想访问保存在没有调试符号的程序的核心转储中的帧(我想在C中执行此操作)。当我打开程序和GDB中的核心转储时,我得到一个包含函数名称的堆栈跟踪。例如:如何从核心转储(无GDB)读取帧?
(gdb) bt
#0 0x08048443 in layer3()
#1 0x08048489 in layer2()
#2 0x080484c9 in layer1()
#3 0x0804854e in main()
所有函数的名称都存储在可执行文件的.strtab节中。我如何建立不同帧的堆栈跟踪?在批处理模式下运行GDB是而不是的一个选项。也只是“从gdb中复制需要的部分”也是一个坏主意,因为代码不是独立编写的。
所以为了更准确地提出我的问题:我在哪里可以找到一个核心转储内的点,以便我可以开始读取堆栈信息?是否有某种类型的图书馆可以访问这些信息?我可以使用的结构?或者甚至更好,文档如何在核心转储中构建这些信息?
(我已经看到了这个问题:“how to generate a stack trace from a core dump file in C, without invoking an external tool such as gdb”,但由于没有有效的答案,我想我会再问吧)
[编辑]我在Linux下的x86这样
Windows,Linux或MacOS的? x86,x86_64,PPC,Arm ....? – Flexo
哦,天哪,我很抱歉,忘了! Linux,x86 – Uhlo
http://www.kernel.org/doc/man-pages/online/pages/man5/core.5.html – Flexo