Ядро системного журнала: code: - PullRequest
0 голосов
/ 21 июня 2011

Во время выполнения некоторого экспериментального кода Java, который взаимодействует с сервером MySQL, я получил эти сообщения, а затем сервер упал:

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 выпуск 13 (Годдард) 2.6.34.8-68.fc13.x86_64

1 Ответ

2 голосов
/ 21 июня 2011

Вот разборка сброшенного кода, если это поможет.Я предполагаю, что байт, заключенный в угловые скобки, - это то место, где произошел сбой кода, хотя я не могу понять, как оператор mov из одного регистра в другой мог бы это сделать.Я не знаю, как использовать любую из программ * grep для поиска двоичных данных, поэтому вам может потребоваться написать несколько строк perl или python, чтобы найти соответствующий код ядра.Весьма сомнительно, что ваш Java-код или что-то связанное с MySQL могло вызвать сбой на уровне ядра.

Исправлена ​​разборка для 64-битного режима:

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]

...