首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Syslogd内核:代码:

Syslogd内核:代码:
EN

Stack Overflow用户
提问于 2011-06-21 09:32:30
回答 1查看 4.4K关注 0票数 0

在运行一些与MySQL服务器交互的实验性Java代码时,我收到了这些消息,然后服务器崩溃了:

代码语言:javascript
复制
Message from syslogd@localhost at Jun 20 20:04:12 ...
 kernel:Stack:

Message from syslogd@localhost at Jun 20 20:04:12 ...
 kernel:Call Trace:

Message from syslogd@localhost at Jun 20 20:04:12 ...
 kernel:Code: e0 48 8d 55 b0 48 89 4d e8 4c 89 45 f0 48 89 45 b8 48 8d 45 d0 4c 89 4d f8 c7 45 b0 10 00 00 00 48 89 45 c0 e8 5a ff ff ff c9 c3 <89> f0 b9 40 00 00 00 55 99 45 31 c0 f7 f9 48 89 e5 48 89 fa 41 

它们是什么意思?重启后,一切都恢复正常。/var/log/messages在事件发生时没有任何条目,dmesg似乎也没有显示有关它的任何内容。

Fedora release 13 (Goddard) 2.6.34.8-68.fc13.x86_64

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-21 09:46:23

这里是转储代码的反汇编,如果有帮助的话。我假设尖括号包围的字节就是代码崩溃的地方,尽管我看不出从一个寄存器到另一个寄存器的mov语句是如何做到这一点的。

代码语言:javascript
复制
   0:   e0 48                   loopne 0x4a
   2:   8d 55 b0                lea    -0x50(%ebp),%edx
   5:   48                      dec    %eax
   6:   89 4d e8                mov    %ecx,-0x18(%ebp)
   9:   4c                      dec    %esp
   a:   89 45 f0                mov    %eax,-0x10(%ebp)
   d:   48                      dec    %eax
   e:   89 45 b8                mov    %eax,-0x48(%ebp)
  11:   48                      dec    %eax
  12:   8d 45 d0                lea    -0x30(%ebp),%eax
  15:   4c                      dec    %esp
  16:   89 4d f8                mov    %ecx,-0x8(%ebp)
  19:   c7 45 b0 10 00 00 00    movl   $0x10,-0x50(%ebp)
  20:   48                      dec    %eax
  21:   89 45 c0                mov    %eax,-0x40(%ebp)
  24:   e8 5a ff ff ff          call   0xffffff83
  29:   c9                      leave  
  2a:   c3                      ret    
  2b:   89 f0                   mov    %esi,%eax   <-- here is where it failed?
  2d:   b9 40 00 00 00          mov    $0x40,%ecx
  32:   55                      push   %ebp
  33:   99                      cltd   
  34:   45                      inc    %ebp
  35:   31 c0                   xor    %eax,%eax
  37:   f7 f9                   idiv   %ecx
  39:   48                      dec    %eax
  3a:   89 e5                   mov    %esp,%ebp
  3c:   48                      dec    %eax
  3d:   89 fa                   mov    %edi,%edx
  3f:   41                      inc    %ecx

我不知道如何使用任何*grep程序来搜索二进制数据,因此您可能需要编写几行perl或python代码来定位所涉及的内核代码。您的Java代码或任何与MySQL有关的代码可能会导致内核级崩溃,这一点非常令人怀疑。

已更正64位模式的反汇编:

代码语言:javascript
复制
00000000 <.data>:
   0:   e0 48                   loopne 0x4a
   2:   8d 55 b0                lea    -0x50(%rbp),%edx
   5:   48 89 4d e8             mov    %rcx,-0x18(%rbp)
   9:   4c 89 45 f0             mov    %r8,-0x10(%rbp)
   d:   48 89 45 b8             mov    %rax,-0x48(%rbp)
  11:   48 8d 45 d0             lea    -0x30(%rbp),%rax
  15:   4c 89 4d f8             mov    %r9,-0x8(%rbp)
  19:   c7 45 b0 10 00 00 00    movl   $0x10,-0x50(%rbp)
  20:   48 89 45 c0             mov    %rax,-0x40(%rbp)
  24:   e8 5a ff ff ff          callq  0xffffff83
  29:   c9                      leaveq 
  2a:   c3                      retq   
  2b:   89 f0                   mov    %esi,%eax
  2d:   b9 40 00 00 00          mov    $0x40,%ecx
  32:   55                      push   %rbp
  33:   99                      cltd   
  34:   45 31 c0                xor    %r8d,%r8d
  37:   f7 f9                   idiv   %ecx
  39:   48 89 e5                mov    %rsp,%rbp
  3c:   48 89 fa                mov    %rdi,%rdx
  3f:   41                      rex.B

这么多年后再看一遍,我意识到问题更有可能是:堆栈下溢。retq没有地方返回,因为堆栈是空的,所以指令指针指向下面的指令-- jc

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6419425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档