Uhl*_*hlo 6 stack gdb coredump frames
我想访问存储在没有调试符号的程序的核心转储中的帧(我想在C中执行此操作).当我在GDB中打开程序和核心转储时,我得到一个包含函数名称的堆栈跟踪.例如:
(gdb) bt
#0 0x08048443 in layer3 ()
#1 0x08048489 in layer2 ()
#2 0x080484c9 in layer1 ()
#3 0x0804854e in main ()
Run Code Online (Sandbox Code Playgroud)
所有函数的名称都存储在.strtab部分的可执行文件中.如何使用不同的框架构建堆栈跟踪?不能以批处理方式运行GDB .而且只是"从gdb中复制部分需要"也是一个坏主意,因为代码不是独立编写的.
所以更准确地提出我的问题:在哪里可以找到核心转储中的点,我可以在哪里开始读取堆栈信息?是否有某种图书馆可以访问这些信息?我可以使用的结构?或者更好的是,文档如何在核心转储中构建这些信息?
(我已经看到了" 如何从C中的核心转储文件生成堆栈跟踪,而不调用gdb等外部工具 "的问题,但由于没有有效的答案,我想我会再问一次)
[编辑]我在Linux x86下这样做
小智 6
Coredump也包含堆栈信息.如果可以将此堆栈信息与coredump文件中的EBP和EIP寄存器值一起使用,则可以打印堆栈跟踪.我写了一个程序来做这件事.您可以在以下链接中找到该程序.
http://www.emntech.com/programs/corestrace.c
Run Code Online (Sandbox Code Playgroud)
用法:编译上面的程序并在执行时给出corefile.
$corestrace core
Run Code Online (Sandbox Code Playgroud)
如果你想要打印符号,你会这样做:让我们假设生成核心的程序是'test'.
$ nm -n test > symbols
$ corestrace core symbols
Run Code Online (Sandbox Code Playgroud)
示例输出如下所示:
$ ./coretrace core symbols
0x80483cd foo+0x9
0x8048401 func+0x1f
0x8048430 main+0x2d
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9454 次 |
| 最近记录: |