Windows VEH – 捕获并丢弃SINGLE_STEPexception

在通过DLL注入进行修改的第三方应用程序中,有一段代码毫无意义地引发了EXCEPTION_SINGLE_STEPexception。 我希望抓住这个例外并完全抛弃它。 但是,Windows不断重新推出它,因此我的exception处理程序陷入了一个无限循环。

我的代码目前:

LONG WINAPI VEH_Handler(struct _EXCEPTION_POINTERS *ExceptionInfo) { printf("Got an exception %X at address %X\n", ExceptionInfo->ExceptionRecord->ExceptionCode, ExceptionInfo->ExceptionRecord->ExceptionAddress); if (ExceptionInfo->ExceptionRecord->ExceptionCode == EXCEPTION_SINGLE_STEP) { return EXCEPTION_CONTINUE_EXECUTION; } return EXCEPTION_CONTINUE_SEARCH; } //... //in DllMain AddVectoredExceptionHandler(1, VEH_Handler); 

有没有办法强制Windows忘记exception并继续执行?

尝试将EIP移动到下一条指令:

 LONG WINAPI VEH_Handler(struct _EXCEPTION_POINTERS *ExceptionInfo) { printf("Got an exception %X at address %X\n", ExceptionInfo->ExceptionRecord->ExceptionCode, ExceptionInfo->ExceptionRecord->ExceptionAddress); if (ExceptionInfo->ExceptionRecord->ExceptionCode == EXCEPTION_SINGLE_STEP) { ExceptionInfo->ContextRecord->Eip++; return EXCEPTION_CONTINUE_EXECUTION; } return EXCEPTION_CONTINUE_SEARCH; }