VEH+硬件断点

主要代码
//异常捕捉
DWORD NTAPI ExceptionHandler(EXCEPTION_POINTERS * ExceptionInfo)
{

	if ((DWORD)ExceptionInfo->ExceptionRecord->ExceptionAddress == 0x00401053)
	{
		ExceptionInfo->ContextRecord->Eip += 6;
		//已经处理了异常,不需要再调用下一个异常处理来处理此异常
		return EXCEPTION_CONTINUE_EXECUTION;
	}
	//调用下一个处理器
	return EXCEPTION_CONTINUE_SEARCH;
}

void SetHwBreakPoint()
{
	CONTEXT ctx;
	ctx.ContextFlags = CONTEXT_ALL;
	GetThreadContext(GetCurrentThread(), &ctx);
	ctx.Dr7= 0x1;
	ctx.Dr0 = 0x00401053;
	SetThreadContext(GetCurrentThread(), &ctx);
	GetThreadContext(GetCurrentThread(), &ctx);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 入口函数
BOOL WINAPI DllMain(HMODULE hModule, DWORD dwReason, PVOID pvReserved)
{
	if (dwReason == DLL_PROCESS_ATTACH)
	{
		//注册全局异常
		AddVectoredExceptionHandler(1, (PVECTORED_EXCEPTION_HANDLER)ExceptionHandler);
		SetHwBreakPoint();
		return Load();
	}
	else if (dwReason == DLL_PROCESS_DETACH)
	{
		Free();
	}

	return TRUE;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



上一篇
CM2记录
发表评论 / Comment

用心评论~