浅谈SEH和UEF

以前写了篇文章 Windows平台下的异常处理 讨论了Window平台下的一些异常处理方式,然而,简单的把SEH和UEF并列,并不是十分合适,它们并不在一个层级上,UEF相当于SEH框架中的ExceptionFilter表达式,SEH和UEF都属于SEH框架,走同样的异常分发流程,因此实现的功能也类似。OS和CRT的UEF安装在最外面,用户的SEH安装在里面,2者工作范围不同。

SEH的ExceptionFilter表达式和UEF允许用户有3个选择,参见MSDN:http://msdn.microsoft.com/en-us/library/ms680634(v=vs.85).aspx,即

EXCEPTION_EXECUTE_HANDLER

EXCEPTION_CONTINUE_EXECUTION

EXCEPTION_CONTINUE_SEARCH

事实上,从代码实现看,SEH是用户自己定义Filter,而UEF是通过OS已经实现的 UnhandledExceptionFilter 调用的,并且由OS或CRT包装了异常处理代码。如开头所说,它们走同样的异常分发流程,

如果SEH的Filter返回 EXCEPTION_EXECUTE_HANDLER,SEH中的异常处理块会执行,实现代码的飞越,类似于Goto。

由于UEF是由OS或者CRT包装过的,当UEF返回 EXCEPTION_EXECUTE_HANDLER 时,OS或者CRT中的异常处理过程得以执行,一般是ExitProcess或者TerminateProcess,终止进程。

SEH和UEF返回EXCEPTION_EXECUTE_HANDLER,都会导致stack unwind。

SEH和UEF的其它信息可以参见大牛的文章: A Crash Course on the Depths of Win32™ Structured Exception Handling

 

顺便说下VEH,VEH只允许用户给出2个选择,参见MSDN:http://msdn.microsoft.com/en-us/library/ms681419(v=vs.85).aspx,即

EXCEPTION_CONTINUE_EXECUTION

EXCEPTION_CONTINUE_SEARCH

VEH是Windows XP开始引入的功能,不支持EXCEPTION_EXECUTE_HANDLER功能,因此也没有相应的global/local unwind功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值