gpt4 book ai didi

C 异常处理

转载 作者:可可西里 更新时间:2023-11-01 10:01:20 24 4
gpt4 key购买 nike

我想知道如何在 C 中处理异常,特别是 EXCEPTION_GUARD_PAGE 异常。

我将尝试更简要地解释一下情况:

我想将一个部分/页面部分标记为 PAGE_GUARD,每当程序遇到它们时我想执行一些任务,我尝试使用经典的 VirtualAlloc 引起异常-> Write -> Exception 命中但我知道在 C 中捕获异常

非常感谢您的帮助。提前致谢。

最佳答案

MSDN 拥有您需要的一切:

在这种特殊情况下,您需要这样的东西:

__try
{
/* Code that may cause exceptions... */
}
__except(GetExceptionCode() == EXCEPTION_GUARD_PAGE
? EXCEPTION_EXECUTE_HANDLER
: EXCEPTION_CONTINUE_SEARCH)
{
/* Exception handling code... */
}

编辑(回应 OP 的评论):

上面的代码可以(MSDN 再次有用),但在这种情况下有更多的可移植性(不依赖于 MSVC 的扩展)并且可以说是不那么丑陋的解决方案:使用 SetUnhandledExceptionFilter 注册一个顶级异常过滤器让它处理这种情况:

/* 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);

关于C 异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6281718/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com