Debugging 理解核心转储文件

Debugging 理解核心转储文件,debugging,x86,gdb,disassembly,coredump,Debugging,X86,Gdb,Disassembly,Coredump,相关的: 调试核心转储文件最常用的方法是什么?我尝试过的两种方法是使用readelf: $ readelf core -a 然后使用gdb: $ gdb file core 然而,对于gdb,我并没有得到太多的信息(至少我不能理解)。例如,它显示: Reading symbols from file... (No debugging symbols found in file) [New LWP 46778] Core was generated by `./file'. Prog

相关的:


调试核心转储文件最常用的方法是什么?我尝试过的两种方法是使用
readelf

$ readelf core -a
然后使用
gdb

$ gdb file core
然而,对于gdb,我并没有得到太多的信息(至少我不能理解)。例如,它显示:

Reading symbols from file...
(No debugging symbols found in file)
[New LWP 46778]
Core was generated by `./file'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x000000000040100a in ?? ()
>>> bt
#0  0x000000000040100a in ?? ()
#1  0x0000000000000001 in ?? ()
#2  0x00007ffe342c3cbe in ?? ()
#3  0x0000000000000000 in ?? ()

但有人能理解这一点吗?如何使用
核心
文件理解某些东西的示例是什么?

(文件中未找到调试符号)-因此GDB没有任何符号名,可能是因为您删除了二进制文件或没有将任何asm符号名
设置为全局
。您只能查看内存中的寄存器值和字节,并反汇编代码。(并获得一个带有数字地址的回溯)。@PeterCordes我看到,基本上,从手写程序集中转储的核心文件没有相应的DWARF对于调试来说是非常无用的,对吧?很难。它是在asm中手工编写的,因此您可以通过查看反汇编(可能通过查看另一个窗口中的注释源代码)来理解程序的工作原理
layout reg
应该仍然有效,disas也应该有效。如果您在GDB中运行程序,直到它在SIGSEGV上停止,您基本上可以访问所有您想访问的内容。您不能单步执行、回放或提前设置断点并重新启动。