【发布时间】:2012-03-18 20:38:24
【问题描述】:
当我查看 linux 内核 OOPS 输出时,EIP 和其他代码地址的值在 0xC01----- 范围内。在我的 System.map 和objdump -S vmlinux 输出中,所有的代码地址至少都在 0xC1 以上------。我的 vmlinux 包含调试符号 (CONFIG_DEBUG_INFO)。
当我通过串行连接 (kgdb) 进行调试并使用 gdb ./vmlinux 加载 gdb 时,我又遇到了同样的问题,即我无法将 $eip 与 System.map 和 objdump 输出中的内容协调一致。当我在 gdb 中运行 where 时,堆栈上会出现混乱:
#0 0xC01----- in ?? ()
#1 0xC01----- in ?? ()
#2 0xC01----- in ?? ()
...
任何人都可以就如何解决这个/这些问题提出任何建议吗?我主要关心的是我如何将 OOPS 中的 eip 值实际映射到 System.map 或 objdump -S vmlinux。我知道 OOPS 会给我函数名和目标代码的偏移量,但我更关心前面提到的问题以及为什么 gdb 无法正确显示堆栈回溯。
【问题讨论】:
标签: gdb linux-kernel