SEH 结构化异常

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SEH 结构化异常相关的知识,希望对你有一定的参考价值。

Structured Exception Handling是windows特有的异常处理,SEH包含了两个方面的功能:
? 终止处理
? 异常处理


终止处理:
终止处理确保无论被保护代码是如何退出的,另一个代码块总能被调用和执行:
__try
{
//Guarded Body

}
__finally
{
//Termination handler

}

无论在被保护代码中使用了return还是goto,亦或者longjump(除非调用了ExitProcess, EixtThread, TerminateProcess, TerminateThread),终止处理程序被调用,即__finally代码块都能执行。

不建议在try块中使用break,goto,return,continue,这会损失性能增加代码量

有一种值得注意的情况:
Void foo()
{
__try
{
Bar();
{
__finally
{
}
}

此时如果bar发生了异常,在vista以后的系统上foo里的finally不会默认进行全局展开finally里的代码不会执行,全局展开(全局展开是发生在嵌套出现的try-finally和try-except之间)的触发由下面介绍的except的filter返回值决定

异常处理:
终止处理确保无论被保护代码是如何退出的,另一个代码块总能被调用和执行,而异常处理定义了发生异常后,如何执行我们的自定义动作(如果程序正常执行,那么异常处理程序不会被调用):
__try
{
//Guarded Body

}
__expect (exception filter)
{
//Exception handler

}

注意:任何时候创建一个__try块,后面必须跟一个finally代码块或except代码块。try后绝对不能同时又finally和except,也不能有多个finally或多个except,可以将try-finally和try-except互相嵌套。

不同于上面的终止处理程序,在异常处理程序try中使用return,goto,continue,break并不会导致额外开销

技术分享

技术分享

技术分享

 

技术分享

技术分享

技术分享

 










































以上是关于SEH 结构化异常的主要内容,如果未能解决你的问题,请参考以下文章

SEH 结构化异常

结构化异常SEH处理机制详细介绍(二)

第24章 SEH结构化异常处理—异常处理及软件异常

第25章 SEH结构化异常处理_未处理异常及向量化异常

解析结构化异常处理(SEH)(第二部分)

深入研究 Win32 结构化异常处理(好多相关文章)