加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – 如何将内核陷阱划分错误rsp:2b6d2ea40450转换为源位置

发布时间:2020-12-14 01:26:37 所属栏目:Linux 来源:网络整理
导读:客户报告我们的一个程序由于除以零而导致错误. 我们只有这个VLM系列: kernel: myprog[16122] trap divide error rip:79dd99 rsp:2b6d2ea40450 error:0 我不相信有核心文件. 我通过互联网搜索了一下,我怎么能告诉导致这种除法的程序行为零,但到目前为止,我失
客户报告我们的一个程序由于除以零而导致错误.
我们只有这个VLM系列:

kernel: myprog[16122] trap divide error rip:79dd99 rsp:2b6d2ea40450 error:0

我不相信有核心文件.

我通过互联网搜索了一下,我怎么能告诉导致这种除法的程序行为零,但到目前为止,我失败了.

我知道16122是程序的pid,所以这对我没有帮助.

我怀疑rsp:2b6d2ea40450与导致错误的行的地址(0x2b6d2ea40450)有关但是这是真的吗?

如果是,那么我怎样才能将它转换为源中的物理大致位置,假设我可以将myprog的调试版本加载到gdb中,然后请求显示该地址周围的上下文…

任何,任何帮助将不胜感激!

解决方法

rip是指令指针,rsp是堆栈指针.除非您有核心映像或正在运行的进程,否则堆栈指针并不太有用.

您可以在gdb中使用addr2line或disassemble命令来查看基于ip的错误行.

$cat divtest.c
main()
{
    int a,b;

    a = 1; b = a/0;
}

$./divtest
Floating point exception (core dumped)
$dmesg|tail -1
[ 6827.463256] traps: divtest[3255] trap divide error ip:400504 sp:7fff54e81330
    error:0 in divtest[400000+1000]

$addr2line -e divtest 400504
./divtest.c:5

$gdb divtest
(gdb) disass /m 0x400504
Dump of assembler code for function main:
2       {
   0x00000000004004f0 :     push   %rbp
   0x00000000004004f1 :     mov    %rsp,%rbp

3               int a,b;
4       
5               a = 1; b = a/0;
   0x00000000004004f4 :     movl   $0x1,-0x4(%rbp)
   0x00000000004004fb :    mov    -0x4(%rbp),%eax
   0x00000000004004fe :    mov    $0x0,%ecx
   0x0000000000400503 :    cltd   
   0x0000000000400504 :    idiv   %ecx
   0x0000000000400506 :    mov    %eax,-0x8(%rbp)

6       }
   0x0000000000400509 :    pop    %rbp
   0x000000000040050a :    retq   

End of assembler dump.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读