gdb - 使用物理内存转储文件调试内核

时间:2012-04-05 17:34:03

标签: linux debugging gdb crash-dumps

我有一个物理内存转储文件和一个符号文件(vmlinux),我想用gdb中的符号文件分析转储文件的内容。例如,要查看当时转储的物理内存的init_task状态:

(gdb) print &init_task
=> show the address of init_task in physical memory dump file, said 0xc0XXXXXX

(gdb) print ((struct task_struct *) 0xc0XXXXXX)->tasks
=> show the content of init_task.tasks in physical memory dump file)

我刚试过gdb命令“restore”和“target core”,两者都不行。需要在正在运行的进程上使用“restore”,并在核心文件(ELF 64位LSB核心文件)中使用“目标核心”作为输入。

(gdb) restore binary physical-memory-dump-file
You can't do that without a process to debug.

(gdb) target core physical-memory-dump-file
"physical-memory-dump-file" is not a core dump: File format not recognized

有什么想法吗?感谢。

UPDATE1: 嗨Pavan,谢谢提醒;因为我正在使用特殊平台,所以在从panic / Oops重新启动内核之后,它上面的引导加载程序会将完整的物理内存保存到转储文件中。因此,物理内存转储文件与物理RAM的大小相同,并且可以从内核的第一个字节映射到内核中的0xc000:0000。

1 个答案:

答案 0 :(得分:2)

物理内存转储和核心文件并不完全相同。核心文件只是映射到地址空间的可执行映像;当内核发生混乱时,它应该在内存中的某个位置留下ELF文件,其中硬编码地址指向图像的其他部分。您可能需要在GDB接受它并匹配您拥有的符号之前从您拥有的内存转储中提取ELF图像(剥离未使用的部分)。