2011-04-12 21 views
0

我需要找出當我的Linux(Debian)系統掛起時(x86平臺)執行什麼操作。我設法提取之前的系統鎖定了以下信息:當通過評估CPU寄存器鎖定系統時,查明正在執行哪個Linux進程

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指向的頁表的偏移量。

任何人都可以請幫我一下嗎?

+0

你是如何獲得這些信息的? – 2011-04-12 10:11:27

回答

0

你從哪裏提取信息?

如果這是一個用戶模式崩潰/死機,想必這信息是從一個核心轉儲(你可以轉儲在運行核心,而不必殺死主題)

在這種情況下,使用gdb /usr/bin/myprogrambinary corefile

而且導航使用gdb命令btinfo threadsinfo sharedthread apply all bt full

這一切的用途將與安裝在系統上的各種庫調試符號大大提高(根據你的發行版,安裝相關的* -dbg軟件包)

相關問題