在 KVM 之外处理 CPU 个异常

Handle CPU exceptions outside of KVM

我想在 KVM 之外捕获和处理 CPU 异常。我怎样才能做到这一点?

    /* KVM_EXIT_EXCEPTION */
    struct {
        __u32 exception;
        __u32 error_code;
    } ex;

    Unused.

来自文档。这个退出状态显然没有实现。 然而,要处理异常 afaik,无论如何您都必须先退出来宾。

我不会在来宾中编写 IDT,请放心。

所以,我通过处理非特权异常(在用户模式下)解决了这个问题,并使用任何方法简单地陷入管理程序,比如写入一个陷阱 MMIO 地址。在我的例子中,来宾总是没有特权并且不能修改它自己的页面表,因此主机将在进入来宾之前设置所有内容。

这完全可以正常工作,但是需要远程处理回溯。