Linux kernel 使用GDB-vmlinux/proc/kcore读取内存
我正在尝试使用gdb从vmlinux读取内存。确切的语法是Linux kernel 使用GDB-vmlinux/proc/kcore读取内存,linux-kernel,gdb,kernel,elf,procfs,Linux Kernel,Gdb,Kernel,Elf,Procfs,我正在尝试使用gdb从vmlinux读取内存。确切的语法是 sudo gdb vmlinux-4.18.0-rc1+ /proc/kcore 我使用此文件是因为vmlinux是指向此文件的符号链接。 结果如下 Reading symbols from vmlinux-4.18.0-rc1+...(no debugging symbols found)...done. warning: core file may not match specified executable file. [Ne
sudo gdb vmlinux-4.18.0-rc1+ /proc/kcore
我使用此文件是因为vmlinux是指向此文件的符号链接。
结果如下
Reading symbols from vmlinux-4.18.0-rc1+...(no debugging symbols found)...done.
warning: core file may not match specified executable file.
[New process 1]
Core was generated by `root=/dev/mapper/rcs--power9--talos--vg-root ro console=hvc0 quiet'.
#0 0x0000000000000000 in ?? ()
(gdb) x/4xb 0xfffffff0
0xfffffff0: Cannot access memory at address 0xfffffff0
(gdb) print &sys_call_table
No symbol table is loaded. Use the "file" command.
(gdb)
文件vmlinux-4.18.0-rc1+位于/boot中。文件类型如下所示:
root@rcs-power9 talos:/boot#文件vmlinux-4.18.0-rc1+
vmlinux-4.18.0-rc1+:ELF 64位LSB可执行文件,64位PowerPC或cisco 7500,版本1(SYSV),静态链接,BuildID[sha1]=a1c9f3fe22ff5cbf419787657c878c8a07e559b2,剥离
我修改了config-4.18.0-rc1+文件,使每个config\u DEBUG选项都设置为yes。然后我重新启动了系统。我的问题是:
我不是自己构建内核的。这是Raptor计算机系统的定制版本。您修改的配置-*文件仅供参考-所有这些选项都已编译到内核中,因此更改它们不会产生任何效果 但是,您可以通过两个步骤获得所需的任何符号:
- 咨询/proc/kallsyms(例如grep系统调用表/proc/kallsyms)。找到地址。注意,这可能显示为0x00000000-可以通过将/proc/sys/kernel/kptr_restrict设置为0来修复
- 然后使用上面的地址作为直接参数。您仍然会遇到一些小问题(例如,“print”不知道它是什么数据类型,但例如x/20x可以工作),但这些问题可以通过一些gdb脚本或提供一个外部dwarf文件来解决