我的运行环境是单核,Win10
驱动跑起来之后 触发好多次Exit 28号事件,由于我也是第一次跑通VT项目,也不知道这个正不正常,在触发28号函数多次后(有的时候10几次,有的时候几百次)触发 33号 直接G。
每次的共同点是 Dbg输出 覆写CPU0结束之后还能执行几次28号Exit事件,然后就执行了一次 33 号Exit事件,ExitQualification为0。查了Intel白皮书是无效的客户区状态
1 | 33. VM - entry failure due to invalid guest state. A VM entry failed one of the checks identified in Section 27.3 . 1.
|
这问题就出现了0.0 明明 28 号 Exit 事件就是客户机发起的吧,为什么在执行这么多次28 号事件后 又爆出 客户机无效 的错误啊(是我理解的执行过程有问题吗。。。。)
我输出了 每一条28号函数修改的寄存器,发现都是对CR3的写操作
以下是覆写CPU0之后对 33号事件 对控制寄存器的读写操作(它只操作了CR3且都是写操作)
VmExitCR: write CR 3, val=15f5b002
VmExitCR: write CR 3, val=1ad002
VmExitCR: write CR 3, val=da41002
VmExitCR: write CR 3, val=595a002
VmExitCR: write CR 3, val=da41002
VmExitCR: write CR 3, val=6ef99002
VmExitCR: write CR 3, val=e4e1002
VmExitCR: write CR 3, val=e4e0001
VmExitCR: write CR 3, val=ffffce001c2fdb28
为什么他要写这么长的。。。。
1 | ffffce001c2fdb28: 1111 1111 1111 1111 1100 1110 0000 0000 0001 1100 0010 1111 1101 1011 0010 1000
|
查了Intel开发手册27.3.1.1 Checks on Guest Control Registers, Debug Registers, and MSRs
1 | The CR3 field must be such that bits 63 : 52 and bits in the range 51 : 32 beyond the processor’s physicaladdress width are 0
|
上述Exit事件号
\====================================
28 EXIT_REASON_CR_ACCESS
33 EXIT_REASON_INVALID_GUEST_STATE
\====================================
Dbg输出结果
\====================================
HyperBone: CPU 0: DriverEntry: Subverting started...
ExitHandler cnt: 1, reason: 28
ExitHandler cnt: 2, reason: 28
ExitHandler cnt: 3, reason: 28
ExitHandler cnt: 4, reason: 28
ExitHandler cnt: 5, reason: 28
ExitHandler cnt: 6, reason: 28
ExitHandler cnt: 7, reason: 28
HyperBone: CPU 0: DriverEntry: Subverting finished
ExitHandler cnt: 8, reason: 28
ExitHandler cnt: 9, reason: 28
ExitHandler cnt: 10, reason: 28
ExitHandler cnt: 11, reason: 28
ExitHandler cnt: 12, reason: 28
ExitHandler cnt: 13, reason: 28
ExitHandler cnt: 14, reason: 28
ExitHandler cnt: 15, reason: 28
ExitHandler cnt: 16, reason: 28
ExitHandler cnt: 17, reason: 33
HyperBone: CPU 0: VmExitStartFailed: Failed to enter VM, reason 33, code 0
最后的蓝屏错误是自己弹出的 Hyper V ERROR。。。。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2023-6-19 22:13
被hr_0515编辑
,原因: