无论try结构体中是什么代码,都会执行finally里面的代码


局部展开
当try里面没有异常,而是return、continue、break等语句时,就不会走_except_handle3这个函数,而是调用_local_unwind2进行展开

然后调用[ebx + esi*4 + 8]

跟进去就到了finally语句块的地方

我们探究一下实现的原理,这里本来应该是lpfnFilter参数,指向异常处理过滤的代码的地址,但是这里是0。只要这个地方的地址为0就是finally语句块

__global_unwind2函数最终会调用一个RtlUnwind函数,该函数内容比较杂乱,其大体流程如下

全局展开

全局展开就是一层一层的向上找异常处理函数,finally模块还是照常执行

