以下x86指令導致三重故障異常(cpu reset)。任何想法爲什麼?爲什麼x86 movsd會導致三重故障異常?
0042F94B F20F100520E44300 movsd xmm0,qword [dword 0x43e420]
以下代碼插入之前,爲了該指令以驗證存儲器在0x43e420是可訪問的(它是):
0042F945 8B0520E44300 mov eax,[dword 0x43e420]
X86是在保護模式。 GDT設置正確,段寄存器都是0x10,除了cs是0x8。兩個GDT條目都是平坦的,並佔用整個32位內存空間。沒有設置eflags上的對齊檢查(AC)。
內存在0x43e420是:一旦指令被執行
0x43e420: 00 00 00 00 00 00 00 40
Bochs的模擬器輸出這些信息:
interrupt(): gate.type(9) != {5,6,7,14,15}
interrupt(): gate descriptor is not valid sys seg (vector=0x0d)
interrupt(): gate descriptor is not valid sys seg (vector=0x08)
這是OS引導代碼部分;不是任何操作系統下的應用程序。
該指令看起來很時髦。 AFAIK,'movsd'是一個雙字大小的字符串移動。你可能意思是'movq'? –
有兩個操作碼指令具有相同的名稱。這裏使用的movsd是SSE2指令集的一部分。 – tgiphil
所以有。那麼,這不是很方便,是嗎?哦,每天都要學點新東西。所以,對於這個問題,這可能是一個對齊問題? –