我想知道如何处理C中的异常,特别是EXCEPTION_GUARD_PAGE
例外。
我将尝试更简要地解释一下情况:
我想将部分/网页部分标记为PAGE_GUARD
,每当程序点击它们时,我想执行一些任务,我尝试使用经典的VirtualAlloc -> Write -> Exception
点击来引发异常但是我知道在C
我很感激帮助。 提前谢谢。
答案 0 :(得分:4)
MSDN拥有您需要的一切:
在这种特殊情况下,你需要这样的东西:
__try
{
/* Code that may cause exceptions... */
}
__except(GetExceptionCode() == EXCEPTION_GUARD_PAGE
? EXCEPTION_EXECUTE_HANDLER
: EXCEPTION_CONTINUE_SEARCH)
{
/* Exception handling code... */
}
编辑(回应OP的评论):
上面的代码会这样做(MSDN再次有用),但在这种情况下,它更具可移植性(不依赖于MSVC的扩展)并且可以说是不那么难看的解决方案:使用{{3注册一个顶级异常过滤器并让它处理这种情况:
/* Our top-level exception filter. */
LONG WINAPI MyUnhandledExceptionFilter(EXCEPTION_POINTERS* exceptionInfo)
{
DWORD exceptionCode = exceptionInfo->ExceptionRecord->ExceptionCode;
if(exceptionCode == EXCEPTION_GUARD_PAGE)
{
/* Handle the situation somehow... */
/* ...and resume the exception from the place the exception was thrown. */
return EXCEPTION_CONTINUE_EXECUTION;
}
else
{
/* Unknown exception, let another exception filter worry about it. */
return EXCEPTION_CONTINUE_SEARCH;
}
}
/* Somewhere else in the code: */
SetUnhandledExceptionFilter(&MyUnhandledExceptionFilter);