-
-
[求助]新手Intel VT-x MTF的问题
-
发表于: 2025-11-29 10:36 318
-
EXTERN_C VOID HvSetGuestMonitorTrapFlag(BOOLEAN Set)
{
#define GUEST_INTERRUPT_STATE 0x0820 // GuestInterruptState字段地址
size_t interrupt_state = 0;
__vmx_vmread(GUEST_INTERRUPT_STATE, &interrupt_state);
if (Set) {
interrupt_state |= 1; // MTF位置1
}
else {
interrupt_state &= ~1; // MTF位清零
}
__vmx_vmwrite(GUEST_INTERRUPT_STATE, interrupt_state);
}我在vt初始化完成后 调用了一次这个mtf的标志位 测试使用
EXTERN_C BOOLEAN VmexitHandler(GpRegisters* pGuestRegisters)
{
KIRQL irql = KeGetCurrentIrql();
if (irql < DISPATCH_LEVEL) {
KeRaiseIrqlToDpcLevel();
}
ULONG CurrentProcessorIndex = KeGetCurrentProcessorNumberEx(NULL);
VmExitInformation ExitReason = { 0 };
FlagRegister guestRflag = { 0 };
BOOLEAN ContinueVmx = TRUE;
ULONG_PTR Rip = 0;
__vmx_vmread(GuestRip, &Rip);
__vmx_vmread(VmExitReason, (SIZE_T*)(&ExitReason));
switch (ExitReason.fields.reason)
{
case ExitMonitorTrapFlag:
Log("进入MTF处理,开始清除MTF");
HvSetGuestMonitorTrapFlag(FALSE);
VmmAdjustGuestRip()
default:
DbgBreakPoint();
break;
}
}清除了标志位会一直刷屏 有没有啥解决办法啊 一直触发这个Log 尝试过调用VmmAdjustGuestRip函数和屏蔽VmmAdjustGuestRip函数
尝试了函数手动开关的方式 但是手动开关不行 只能提前在vm初始化的时候开启 已确认是支持mtf的 虚拟机测试的
void VmmAdjustGuestRip()
{
ULONG instLen = 0;
ULONG_PTR rip = 0;
__vmx_vmread(GuestRip, &rip);
//获取Guest当前执行指令的长度
__vmx_vmread(VmExitInstructionLength, (SIZE_T*)&instLen);
__vmx_vmwrite(GuestRip, (SIZE_T)(rip + instLen));
}[培训]Windows内核深度攻防:从Hook技术到Rootkit实战!
最后于 2025-11-29 10:41
被51974055编辑
,原因:
赞赏
他的文章
赞赏
雪币:
留言: