我发布了一个关于验证指针可访问性的问题。其结论是要么使用IsBadReadPtr检查指针,要么使用SEH捕获异常(最好使用两者都不使用,并调试应用程序,但这不是问题所在)。
据说IsBadReadPtr是坏的,因为它会尝试读取指针,并捕获任何异常。它可能会捕获堆栈保护页异常,从而阻止它到达本应扩展堆栈的内存管理器。
如果我使用SEH而只捕获EXCEPTION_ ACCESS_VIOLATION异常,这会造成同样的问题吗?
另一件事:使用SEH意味着什么?这文章指出,“编译器不能在受SEH保护的代码中执行流分析”。如果我在__try块中调用一个函数,怎么样?编译器难道根本不优化被调用的函数吗?
发布于 2009-06-14 19:36:25
如果我使用SEH而只捕获EXCEPTION_ ACCESS_VIOLATION异常,这会造成同样的问题吗?
我想会的。解决方法可能是在开始调用IsBadReadPtr之前探测您所知道和关心的任何线程的堆栈(“探测堆栈”,我的意思是有意地触摸堆栈中的每个内存页,以确保每个页面都预先分配)。
编译器难道根本不优化被调用的函数吗?
如果函数没有内联,我希望编译器应用通常的优化(函数的优化不会受到函数从哪里调用的影响)。
https://stackoverflow.com/questions/993551
复制相似问题