Code - Windows 堆栈恢复

原创
2014/08/05 17:10
阅读数 304
#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;
}

 

 

展开阅读全文
SEH
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部