在我通过DLL注入(inject)进行修改的第三方应用程序中,有大量代码无意义地抛出EXCEPTION_SINGLE_STEP异常。我希望捕获该异常并将其完全丢弃。但是,Windows不断将其抛出,因此我的异常处理程序陷入了无尽的循环。
我的代码当前:
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忽略该异常并继续执行?
最佳答案
尝试将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;
}