首页
社区
课程
招聘
[求助]新手Intel VT-x MTF的问题
发表于: 2025-11-29 10:36 318

[求助]新手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编辑 ,原因:
收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回