/*********************************************************************
* Author : Samson
* Date : 08/04/2014
* Test platform:
* Linux ubuntu 3.2.0-58-generic-pae
* GNU bash, version 4.2.39
* *******************************************************************/
结构化异常处理程序?
结构化异常处理,是Windows操作系统上,Microsoft对C/C++程序语言做的语法扩展,用于处理异常事件的程序控制结构。
异常事件是打断程序正常执行流程的不在期望之中的硬件、软件事件。硬件异常是CPU抛出的如“除0”、数值溢出等;软件异常是操作系统与程序通过RaiseException语句抛出的异常。
Microsoft扩展了C语言的语法,用 try-except与try-finally语句来处理异常。异常处理程序可以释放已经获取的资源、显示出错信息与程序内部状态供调试、从错误中恢复、尝试重新执行出错的代码或者关闭程序等等。
一个__try语句不能既有__except,又有__finally。但try-except与try-finally语句可以嵌套使用。
允许在发生紧急情况时(如:内存访问错误,被0除,或无效操作),由应用程序获取控制权并自主处理,无需操作系统干预。未被处理的异常通常会导致应用程序异常终止,随之而来的是程序执行无效操作即将关闭的消息。
__try
{
// 受保护执行的代码
}
__except ( 过滤表达式 )
{
// 异常处理代码
}
首先,__try复合语句中的受保护的代码被执行。如果没有异常发生,则继续执行__except复合语句之后的代码。如果__try复合语句中的受保护执行的代码发生了异常,或受保护执行的代码调用的函数内部发生了异常并要求调用者来处理该异常,__except语句的过滤表达式(filter expression)被求值,根据其结果来决定如何处理异常:
陷阱与攻击:
在大部分情况下,指向结构化异常处理程序的指针都保存在栈的SEH帧中,溢出缓冲区可以改写它们。改写SEH帧主要有两个目的:通过替换结构化异常处理程序获取控制权;万一产生异常时,抵制程序异常终止。
REF:
http://zh.wikipedia.org/wiki/%E7%BB%93%E6%9E%84%E5%8C%96%E5%BC%82%E5%B8%B8%E5%A4%84%E7%90%86