【问题标题】:Long mode external interrupt causes #GP fault长模式外部中断导致#GP故障
【发布时间】:2021-12-25 20:03:11
【问题描述】:

我正在尝试在 hypervision 下编写长模式来宾程序。当我向来宾注入外部中断时,来宾立即触发了#GP 故障。错误码为0x11,表示cs选择器为0x10,此故障为外部故障。 (#GP 故障被我的管理程序拦截了。换句话说,我没有在 IDT 中设置#GP 处理程序。)
我猜想我的 GDT 有问题。但是,我将中断处理程序的 cs 选择器(即:cs.selector=0x10)指定为正常的控制流。正常的控制流程与这个cs 选择器配合得很好,那么#GP 错误的真正具体原因可能是什么?
一份详尽的清单也将不胜感激。

【问题讨论】:

    标签: osdev interrupt-handling


    【解决方案1】:

    原来我忘记在我的管理程序中为来宾初始化 GDT。因此,外部中断引用了一个空代码段,从而触发了#GP 故障。
    总之,VMCB中保存的段状态不一定与Guest的GDT内存区域同步。

    【讨论】:

      猜你喜欢
      • 2013-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-06
      • 1970-01-01
      • 2022-12-10
      • 2021-02-25
      相关资源
      最近更新 更多