appname[8048000+252000] 中的 0 ip (null) sp bf9ed55c 错误 4 出现段错误
如果我没有 IP 地址,如何确定崩溃发生的位置?它是 (null) 意味着什么有用吗?
在 appname[8048000+262000] = 0x82Aa000 中是否应该提供线索? 0x82AA000 是我应该尝试使用的值吗,nm 输出和映射文件都没有提供太多帮助。
最佳答案
可以将指令指针设置为 NULL 的东西:
- 跳转到 NULL
- 调用 NULL
- 返回NULL
在前两种情况下,堆栈仍然处于分支或调用来自的帧的状态。在最后一种情况下,可能有什么东西破坏了前一个函数堆栈上的返回地址,并且可能不清楚堆栈应该是什么,但通常仍然可以找到一些更早的堆栈帧并尝试重建发生了什么在那儿。
二进制文件可以加载到不同的地址。 appname[8048000+252000]
描述文件 appname
中的一个段,它被映射到地址为 8048000
-82aa000
的内存中, 它没有查明故障出在哪里。
使用核心转储进行调试会有更好的运气,其中将包含有关状态的详细信息(例如其他寄存器)以及映射到内存的位置(包括堆栈的内容)。如果您使用的是 systemd
,则 coredump 存储在日志中,可以使用 coredumpctl
检索(例如,使用 coredumpctl gdb
开始调试上次崩溃>).
关于linux - ip(null)时如何判断段错误发生在什么地方?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47214135/