虚拟8086模式下的陷阱与故障处理解析
1. 进入虚拟8086模式
在特定操作中,会直接跳转到ret_from_sys_call,此时ESP寄存器指向栈上8086风格寄存器保存区域的起始位置。ret_from_sys_call例程会将栈中的寄存器值弹出到硬件寄存器中。这些值并非进入系统服务时由SAVE_ALL保存的值,而是之前函数在栈上构建的16位值,特别是设置了VM位的VFLAGS值。一旦重新加载这些值,机器就进入了虚拟8086(vm86)模式。
此系统服务退出时,栈上会留下相当多的信息。栈顶是一个完整的struct pt_regs,其在进入系统服务时构建;下面是kernel_vm86_struct的第二部分,从VM86_TSS_ESP0(或flags)开始。ret_from_sys_call仅弹出了kernel_vm86_struct的第一部分,即kernel_vm86_regs。
输入参数如下:
- 参数0:指向内核栈regs字段的指针,该指针可能位于寄存器中。
- 参数1:指定tsk应位于EBX寄存器中。
-