想象一台32位x86计算机,内存不到3GB,CPU设置为禁用分页和平面段描述符(基地址为0x0,数据和代码的有效限制均为0xffffffff)。
当ring0中的指令尝试使用mov指令引用未被任何内存地址支持的物理地址时会发生什么?
QEMU仿真会出现错误,如“fatal: Trying to execute code outside RAM or ROM”。
这些异常与内存问题有关:
1.它不应该是“Segment Not Present (#NP)”,因为只有在加载段寄存器时才会发生,但我实际上可以加载平面段而没有问题。
2.“Stack Fault (#SS)”不应该生成,因为代码不引用堆栈。
3.由于代码正在ring-0中运行,并且段被设置为允许访问每个物理地址,因此不应该发生“General Protection (#GP)”。
4.分页已禁用,因此也不是“Page Fault (#PF)”。
5.它不是对齐问题,因此不应触发“Alignment Check (#AC)”。
我已经没有其他选择了,我不知道应该发生什么。
当ring0中的指令尝试使用mov指令引用未被任何内存地址支持的物理地址时会发生什么?
QEMU仿真会出现错误,如“fatal: Trying to execute code outside RAM or ROM”。
这些异常与内存问题有关:
1.它不应该是“Segment Not Present (#NP)”,因为只有在加载段寄存器时才会发生,但我实际上可以加载平面段而没有问题。
2.“Stack Fault (#SS)”不应该生成,因为代码不引用堆栈。
3.由于代码正在ring-0中运行,并且段被设置为允许访问每个物理地址,因此不应该发生“General Protection (#GP)”。
4.分页已禁用,因此也不是“Page Fault (#PF)”。
5.它不是对齐问题,因此不应触发“Alignment Check (#AC)”。
我已经没有其他选择了,我不知道应该发生什么。