1、结构化异常处理(SEH)
使用SEH,并不意味着可以完全忽略代码中可能出现的错误,但是我们可以将软件主要功能编写和软件异常情况处理这两个任务分开。
SEH实际上包含两方面的功能:终止处理和异常处理。
终止处理程序确保不管一个代码块(被保护代码)是如何退出的,另一个代码块(终止处理程序)总能被调用和执行。
语法:
__try
{
//被保护代码块
}
__finally
{
//终止处理程序
}
除非调用ExitProcess , ExitThread , TerminateProcess , TerminateThread 来终止线程或进程,否则,只要程序要非正常离开被保护代码,终止处理程序会被调用。
2、局部展开
当try模块中出现 return , goto ,longjump 等要离开try模块时,编译器就会生成一些代码先将返回值保存在一个由它创建的临时变量里,然后再执行finally模块,这个过程称为“局部展开”。一旦finally代码块执行完毕,编译器所创建的临时变量的值会返回给函数的调用者。