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