Выяснение того, какой процесс Linux выполнялся при блокировке системы, путем оценки регистров процессора - PullRequest
0 голосов
/ 12 апреля 2011

Мне нужно выяснить, что происходит, когда моя система Linux (Debian) зависает (платформа x86). Мне удалось извлечь следующую информацию непосредственно перед блокировкой системы:

es: 0x7B
cs: 0x73
ss: 0x7B
ds: 0x7B
fs: 0x0
gs: 0x33
ldtbase: 0x0
tr: 0x80
dr7: 0x400
dr6: 0xFFFF0FF0
eax: 0xBFBDE820
ecx: 0xA908F9A0
edx: 0xB708A000
ebx: 0xB71B5278
esp: 0xBFBDE730
ebp: 0xBFBDE838
esi: 0x9D36B58
edi: 0x9D50BB8
eip: 0xB71B13E8
eflags: 0x203206
cr3: 0x1E9DE000
cr0: 0x80050033

Из значений сегментных регистров я знаю, что когда Linux зависает, он находится в режиме пользовательского пространства. Я хотел бы узнать, какой процесс / библиотека вызывает сбой, и в идеале какая именно его часть.

Глядя на CR3 и EIP, я смогу получить эту информацию, но я запутался. Насколько я знаю, виртуальный адрес 0xB71B13E8 относительно используемой таблицы страниц (0x1E9DE000). Теперь указатель инструкции указывает на физический адрес, верно? Я думаю, что я должен преобразовать это (значение EIP) в виртуальный адрес, который будет смещением таблицы страниц, указанной CR3.

Может ли кто-нибудь помочь мне немного об этом?

1 Ответ

0 голосов
/ 12 апреля 2011

Откуда вы взяли информацию?

Если это сбой / блокировка пользовательского режима, вероятно, эта информация взята из дампа ядра (вы можете сбрасывать ядра на лету, не обязательно убивая субъекта)

В этом случае используйте gdb /usr/bin/myprogrambinary corefile

и навигация с использованием команд gdb bt, info threads, info shared, thread apply all bt full и т. Д.

Полезность всего этого значительно улучшится благодаря отладочным символам для различных установленных библиотекв вашей системе (в зависимости от вашего дистрибутива установите соответствующие пакеты * -dbg)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...