我有一个物理内存转储文件和一个符号文件(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位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
有什么想法吗?谢谢。
更新1: 嗨帕万,谢谢你的提醒;由于我在特殊平台上工作,因此在内核因 panic /糟糕而重新启动后,其上的引导加载程序会将完整的物理内存保存到转储文件中。因此,物理内存转储文件将与物理RAM具有相同的大小,并且可以从其第一个字节开始映射到内核中的0xc000:0000。
最佳答案
物理内存转储和核心文件并不完全相同。核心文件只是映射到地址空间的可执行镜像;当内核发生紧急情况时,它应该在内存中的某个位置留下一个 ELF 文件,其中的硬编码地址指向镜像的其他部分。在 GDB 接受它并匹配您拥有的符号之前,您可能必须从内存转储中提取 ELF 镜像(去掉未使用的部分)。
关于linux - gdb - 使用物理内存转储文件调试内核,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10033221/