__try; __finally; __leave
u 正常从try块结束后进入finally;__leave会跳出try块,执行finally(无系统开销);
u 局部展开:如果try块过早退出(goto, longjump, continue, break, return等),强制转移到finally块执行(系统开销大!);
u 全局展开(global unwind):如果在try块中调用的函数引发内存访问违规(memory access violation),会执行finally;
为了确定是上述哪种情况引起finally执行,可以调用内部函数(或内蕴函数,instrinsic function):
BOOL AbnormalTermination(); // 只能在finally中调用!
如果自然退出,FALSE;有局部或全局扩展,TRUE。
l “内部函数”是编译程序识别的一种特殊函数。编译程序产生内联(inline)代码,而不是调用函数代码!结果使代码增长,但执行速度加快。
本文详细解析了__try、__finally和__leave指令的运作机制,包括正常流程、局部展开及全局展开的情况,并介绍了如何使用AbnormalTermination()函数判断finally块的触发原因。

被折叠的 条评论
为什么被折叠?



