如何从核心转储读取帧(没有GDB)?

如何从核心转储读取帧(没有GDB)?,gdb,stack,frames,coredump,Gdb,Stack,Frames,Coredump,我想访问一个没有调试符号的程序的核心转储中存储的帧(我想在C中这样做)。当我打开程序和GDB内部的核心转储时,我会得到一个堆栈跟踪,其中包括函数名。例如: (gdb) bt #0 0x08048443 in layer3 () #1 0x08048489 in layer2 () #2 0x080484c9 in layer1 () #3 0x0804854e in main () 所有函数的名称都存储在.strtab部分的可执行文件中。如何使用不同的帧建立堆栈跟踪?在批处理模式下运行

我想访问一个没有调试符号的程序的核心转储中存储的帧(我想在C中这样做)。当我打开程序和GDB内部的核心转储时,我会得到一个堆栈跟踪,其中包括函数名。例如:

(gdb) bt
#0  0x08048443 in layer3 ()
#1  0x08048489 in layer2 ()
#2  0x080484c9 in layer1 ()
#3  0x0804854e in main ()
所有函数的名称都存储在.strtab部分的可执行文件中。如何使用不同的帧建立堆栈跟踪?在批处理模式下运行GDB不是一个选项。而且仅仅“从gdb复制需要的部分”也是一个坏主意,因为代码不是独立编写的

因此,让我的问题更加精确:我在核心转储中的什么位置可以开始读取堆栈信息?是否有某种图书馆可以访问这些信息?我可以使用的结构?或者更好的是,在核心转储中如何构造这些信息的文档

(我已经看到了问题“”,但由于没有有效的答案,我想我会再问一遍)


[Edit]我在Linux x86下执行此操作Coredump也包含堆栈信息。如果可以将此堆栈信息与coredump文件中的EBP和EIP寄存器值一起使用,则可以打印堆栈跟踪。我写了一个程序来做这个。您可以在以下链接中找到该程序

    http://www.emntech.com/programs/corestrace.c
用法:编译上述程序,并在执行时给出corefile

       $corestrace core
如果您还希望打印符号,您可以这样做:假设生成核心的程序是“test”

       $ nm -n test > symbols
       $ corestrace core symbols
示例输出如下所示:

       $ ./coretrace core symbols 

        0x80483cd foo+0x9
        0x8048401 func+0x1f
        0x8048430 main+0x2d

Windows、Linux还是MacOS?x86,x86_64,PPC,Arm…?哦,天哪,对不起,忘了!Linux,x86您可以使用
readelf-a core
来阅读生成的核心文件。您可能希望在转储时查看寄存器中的堆栈指针,然后从那里返回。谢谢,核心转储的手册页面只是引用GDB进行转储分析。但我的目标系统无法访问GDB。该链接不再有效,但我在上找到了一个副本,并为此添加了一个要点:@Ame所有链接都已断开。你能再寄一次吗?