1

我发布了一个关于验证指针可访问性的问题。结论是要么使用 IsBadReadPtr 检查指针,要么使用 SEH 捕获异常(最好两者都不使用,并调试应用程序,但这不是这里的问题)。

据说 IsBadReadPtr 不好,因为除其他原因外,它会尝试读取指针,并会捕获任何异常。它可能会捕获堆栈保护页面异常,从而阻止它到达内存管理器,这应该扩大了堆栈。

如果我使用 SEH 并且只捕获 EXCEPTION_ACCESS_VIOLATION 异常,这会产生同样的问题吗?

另一件事:使用 SEH 的含义是什么? 本文建议“编译器无法在受 SEH 保护的代码中执行流分析”。如果我在 __try 块中调用一个函数怎么样。编译器根本不会优化被调用的函数吗?

4

1 回答 1

1

如果我使用 SEH 并且只捕获 EXCEPTION_ACCESS_VIOLATION 异常,这会产生同样的问题吗?

我想会的。一种解决方法可能是在您开始调用 IsBadReadPtr 之前探测您知道和关心的任何线程的堆栈[s](通过“探测堆栈”我的意思是故意触摸堆栈中的每个内存页,以确保每个页是预先分配的)。

编译器根本不会优化被调用的函数吗?

如果函数没有内联,我希望编译器应用通常的优化(函数的优化不会受到函数调用位置的影响)。

于 2009-06-14T19:36:25.367 回答