首页 > 代码库 > WIN32堆栈恢复
WIN32堆栈恢复
#include <stdio.h> #include <windows.h> void die_recursion() { static unsigned long s=-1; printf("递归%lu次\n",++s); die_recursion(); } /* Return: 异常被忽略,控制流将在异常出现的点之后,继续恢复运行。 EXCEPTION_CONTINUE_EXECUTION (-1) 异常不被识别,也即当前的这个__except模块不是这个异常错误所对应的正确的异常处理模块。 系统将继续到上一层的try-except域中继续查找一个恰当的__except模块。 EXCEPTION_CONTINUE_SEARCH (0) 异常已经被识别,也即当前的这个异常错误,系统已经找到了并能够确认, 这个__except模块就是正确的异常处理模块。控制流将进入到__except模块中。 EXCEPTION_EXECUTE_HANDLER (1) */ int get_seh_info(int seh_code) { if(seh_code == STATUS_STACK_OVERFLOW) { printf("文件:%s<发生堆栈上溢>\n",__FILE__); return EXCEPTION_EXECUTE_HANDLER ; } else { return EXCEPTION_CONTINUE_SEARCH; } } int main() { int i=0; for(i = 0; i < 10 ;i++)//调用死递归10次 { __try { die_recursion();//死递归 } __except(get_seh_info( GetExceptionCode() ) ) { if( _resetstkoflw() ) { printf("恢复堆栈成功\n"); } else { printf("恢复堆栈失败\n"); } } } return 0; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。