Loading... ##### S.E.H概述 S.E.H即异常处理结构体(Structure Exception Handler),它是Windows异常处理机制所采用的重要数据结构。每个S.E.H包含两个DWORD指针:S.E.H链表指针和异常处理函数句柄,共8个字节,如图6.1.1所示。 ![image.png](http://47.117.131.13/usr/uploads/2021/11/2371481321.png) 作为对S.E.H的初步了解,现在只需要知道以下几个要点: 1. S.E.H结构体存放在系统栈中。 2. 当线程初始化时会自动向栈中安装一个S.E.H,作为线程默认的异常处理。 3. 如果源代码中使用了__try{}__except{}或者Assert宏等异常处理机制,编译器将最终通过向当前函数栈帧中安装了一个S.E.H来实现异常处理。 4. 栈中一般会同时存在多个S.E.H。 5. 栈中的多个S.E.H通过链表指针在栈内由栈顶向栈底串成单向链表,位于链表最顶端的S.E.H通过T.E.B(线程环境块)0字节偏移处的指针标识。 6. 当异常发生时,操作系统会中断程序,并首先从T.E.B的0字节偏移处取出距离栈顶最近的S.E.H,使用异常处理函数句柄所指向的代码来处理异常。 7. 当离"事故现场"最近的异常处理函数运行失败时,将顺着S.E.H链依次尝试其它的异常处理函数。 8. 如果程序安装的所有异常处理函数都不能处理,系统将采用默认的异常处理函数。通常,这个函数会弹出一个错误对话框,然后强制关闭程序。 ![image.png](http://47.117.131.13/usr/uploads/2021/11/1728063456.png) ``` 提示:为了迅速理解基于S.E.H的异常处理机制,这里的表述做了一定的简化,省略了很多细节。 ``` 从程序设计的角度来讲,S.E.H就是在系统关闭程序之前,给程序一个执行预先设定的回调函数(call back)的机会。 待写...... 最后修改:2021 年 11 月 12 日 04 : 53 PM © 允许规范转载