以下 x86 指令导致三重故障异常(cpu 重置)。知道为什么吗?
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)
这是操作系统启动代码的一部分;不是任何操作系统下的应用程序。