【发布时间】:2009-06-14 19:27:48
【问题描述】:
我已经发布了question 关于验证指针的可访问性。结论是要么使用 IsBadReadPtr 检查指针,要么使用 SEH 捕获异常(最好两者都不使用,并调试应用程序,但这不是这里的问题)。
IsBadReadPtr 被认为是坏的,除其他原因外,它会尝试读取指针,并会捕获任何异常。它可能会catch a stack guard page exception,从而阻止它到达内存管理器,这应该扩大了堆栈。
如果我使用 SEH 并且只捕获 EXCEPTION_ACCESS_VIOLATION 异常,这会产生同样的问题吗?
另一件事:使用 SEH 的含义是什么? This 文章建议“编译器无法在受 SEH 保护的代码中执行流分析”。如果我在 __try 块中调用一个函数怎么样。编译器会不会根本不优化被调用的函数?
【问题讨论】:
-
另见 OSS-Security 邮件列表上的Qualys Security Advisory - The Stack Clash。它展示了一些巧妙的技巧,以及它对保护页面的诅咒。令人惊讶的是,他们用它删除了多少操作系统。我不禁想知道 Windows 是否也受到影响。