【发布时间】:2011-03-04 18:21:36
【问题描述】:
在各种 Win 平台(XP 及更高版本)上环境为 VC++ 9
我正在编写一个未处理的异常处理程序。我在内核时代有一个模糊的回忆,即捕获 EXCEPTION_GUARD_PAGE 是不好的,因为它是为了告诉操作系统扩大堆栈而生成的。
我的问题有两个:
用户空间会不会出现这样的异常?
如果可以,抓到它安全吗?
我对用它做任何事情都不是特别感兴趣。我只是想知道是否需要将特殊代码放入不捕获它(因为我现在正在捕获所有内容)。
__更新:__
我记得我的来源,是Raymond Chen的博客(http://blogs.msdn.com/b/oldnewthing/archive/2006/09/27/773741.aspx)
我最初担心的是,在捕获所有异常时,如果我捕获了 EXCEPTION_GUARD_PAGE,我可能会阻止操作系统看到异常并扩大堆栈。
进一步考虑,我怀疑 EXCEPTION_GUARD_PAGE 可能在生成它的读/写操作期间在内核中处理,因此永远不会到达我的用户空间代码。
我想我正在寻找某人来证实(或反驳)这一点。
__第二次更新:__
我还没有选择答案,因为没有人真正回答过这个问题。我会保持打开状态,希望有人可以提供我所寻求的信息。
__第三次更新__
仍然生活在(微弱的)希望中。
__第四次更新__
嗯,我从来没有得到一个有用的答案。当我问这个问题时,我早就完成了我正在编写的模块。我认为,出于实际目的,这个问题已经死了。我可能不会再更新了。
【问题讨论】:
-
Windows 不会自动扩大堆栈。
-
克里斯托弗——是的。阅读我链接到的 Raymond Chen 的文章。