我正在尝试addr2line
将“pc”寄存器值从内核oops(示例)转换为内核代码中的一行。我相信程序计数器的值代表一个虚拟地址。
现在Stack Overflow 上的这篇文章说我们通常提供 addr2line 的偏移量而不是虚拟地址。VA 只能在地址空间随机化关闭时使用。这对内核也适用吗?我相信它应该。
幻灯片 14 上的这个嵌入式 Linux 会议演讲也使用程序计数器值跳转到代码行,但我相信这只有在地址空间随机化关闭时才有效。否则,一旦虚拟内存被初始化,内核可能会被随机重定位。在这种情况下,从 oops 中选择的任何虚拟地址对 addr2line 都没有任何意义。这都是理论。我现在有两个问题:
- 我的理解正确吗?如果没有,请纠正我。
- 我们如何关闭内核的地址空间随机化,以便可以预测符号的位置?