2

我有一个物理内存转储文件和一个符号文件(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”需要在正在运行的进程上使用,“target core”需要在核心文件(ELF 64-bit LSB core file)中作为输入。

(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

任何想法?谢谢。

更新1:嗨,帕万,感谢您的提醒;因为我在特殊平台上工作,所以它上面的引导加载程序会将完整的物理内存保存到转储文件中,在内核从恐慌/糟糕重启后。所以物理内存转储文件将与物理内存具有相同的大小,并且可以从它的第一个字节映射到内核中的 0xc000:0000。

4

1 回答 1

2

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

于 2012-04-06T04:21:54.317 回答