2016-02-11 78 views
0

我正在嘗試調試崩潰的自定義引導加載程序。我在QEMU運行它,並正在以下寄存器轉儲:從寄存器轉儲中查找故障代碼

Triple fault 
CPU Reset (CPU 0) 
EAX=00000000 EBX=00000080 ECX=0005ff60 EDX=000258a8 
ESI=0422fba0 EDI=0422fb90 EBP=00050000 ESP=0005ff5c 
EIP=00025c8b EFL=00000046 [---Z-P-] CPL=0 II=0 A20=1 SMM=0 HLT=0 
ES =0010 00000000 ffffffff 00cf9300 DPL=0 DS [-WA] 
CS =0008 00000000 000fffff 004f9e00 DPL=0 CS32 [CR-] 
SS =0010 00000000 ffffffff 00cf9300 DPL=0 DS [-WA] 
DS =0010 00000000 ffffffff 00cf9300 DPL=0 DS [-WA] 
FS =0010 00000000 ffffffff 00cf9300 DPL=0 DS [-WA] 
GS =0010 00000000 ffffffff 00cf9300 DPL=0 DS [-WA] 
LDT=0000 00000000 0000ffff 00008200 DPL=0 LDT 
TR =0000 00000000 0000ffff 00008b00 DPL=0 TSS32-busy 
GDT=  0002ea88 00000038 
IDT=  00000000 000003ff 
CR0=00000011 CR2=00000000 CR3=00000000 CR4=00000000 
DR0=0000000000000000 DR1=0000000000000000 DR2=0000000000000000 DR3=0000000000000000 
DR6=00000000ffff0ff0 DR7=0000000000000400 
CCS=0000001c CCD=0005ff58 CCO=CLR  
EFER=0000000000000000 
FCW=037f FSW=0000 [ST=0] FTW=00 MXCSR=00001f80 
FPR0=0000000000000000 0000 FPR1=0000000000000000 0000 
FPR2=0000000000000000 0000 FPR3=0000000000000000 0000 
FPR4=0000000000000000 0000 FPR5=0000000000000000 0000 
FPR6=0000000000000000 0000 FPR7=0000000000000000 0000 
XMM00=00000000000000000000000000000000 XMM01=00000000000000000000000000000000 
XMM02=00000000000000000000000000000000 XMM03=00000000000000000000000000000000 
XMM04=00000000000000000000000000000000 XMM05=00000000000000000000000000000000 
XMM06=00000000000000000000000000000000 XMM07=00000000000000000000000000000000 

我懷疑三重故障的根本原因是試圖執行一個無效的處理器指令(在這種情況下,rdrand)。但是,我無法確認,因爲我不知道上述轉儲中的異常代碼位於何處。

+0

如果您沒有處理正常故障或雙重故障的處理程序,則會發生三重故障。您可能想要設置它們,或使用調試器。 – Jester

+0

嘗試調用雙重故障處理程序導致故障時發生三重故障。當嘗試調用任何故障拖拉機導致故障時會發生雙重故障。所以你不會找到問題的根源,是什麼引起了第一個故障,在第三個故障的轉儲中。 –

回答

0

事實證明,這確實是一個無效指令錯誤,導致了這一點。我通過查看引導加載程序的反彙編並將其與英特爾ISA文檔進行比較來證明這一點。