将Win32 SEH与堆分配的堆栈帧混合使用

时间:2010-03-01 16:03:50

标签: winapi seh

有没有办法逃避Win32的“一大堆”模型而不会损害SEH?我希望能够在堆上分配堆栈帧,作为实现协同程序的一种方式。但是,我的代码目前依赖于SEH,并且this article,几页下来说(与异常处理程序的遍历,扫描,强调我的相关):

  

在这次链遍历期间,操作系统对于损坏的堆栈非常偏执。它检查所有链条目是否在堆栈范围内 。 (这些界限也记录在TEB中)。操作系统还会检查堆栈中的所有条目是否为升序。如果违反这些规则,操作系统将认为堆栈已损坏,并且无法处理异常。这是Win32应用程序无法将其堆栈拆分为多个不相交的段作为处理堆栈溢出的创新技术的原因之一。

基本上,如果当前堆栈帧在“一个大堆栈”之外发生异常,则该过程将立即终止。不理想的行为。

是否有人能够解决此问题并在本机Win32应用中使用不相交的堆栈来利用SEH?此外,是否有任何其他Win32特定的“陷阱”与不相交的堆栈?

1 个答案:

答案 0 :(得分:2)

将纤维专门添加到Win32以支持此功能。开始阅读here...同时检查此警告blog post