第八章 Windows下的异常处理
8.1 中断是由外部硬件设备或异步事件产生的,异常是由内部事件产生的(故障、缺陷、终止(不可恢复))
IDT(中断描述符表)是硬件和操作系统交接中断和异常的关口,IDT是一张位于物理内存中的线性表,共有256项。在32位模式下每个IDT项的长度是8字节,在 64位模式下则为64字节。操作系统在启动阶段会初始化这个表,系统中的每个 CPU都有一份IDT 的拷贝。下面主要讨论 32位模式下的IDT。
IDT的位置和长度是由CPU的IDTR寄存器描述的。IDTR寄存器共有48位,其中高32位是表的基址,低 16 位是表的长度。尽管可以使用 SIDT 和LIDT指令来读写该寄存器,但 LIDT 是特权指令,只能在 Ring0特权级下运行。
IDT的每一项都是一个门结构,它是发生中断或异常时 CPU转移控制权的必经之路,包括如下3 种门描述符。
任务门(Task-gate)描述符,主要用于CPU的任务切换(TSS功能)。
中断门(Interrupt-gate)描述符,主要用于描述中断处理程序的人口。
陷阱门(Trap-gale)描述符,主要用于描述异常处理程序的人口。
8.2 SEH的概念及基本知识
在没有调试器参与的情况下,系统主要依靠 SEH机制(用户模式、内核模式下均可使用)和 VEH机制(仅支持用户模式)进行异常处理。SEH(结构化异常处理)是 Windows 操作系统用于自身除错的一种机制,也是开发人员处理程序错误或异常的强有力的武器。SEH是一种错误保护和修复机制,它告诉系统当程序运行出现异常或错误时由谁来处理,给了应用程序一个改正错误的机会。从程序设计的角度来说,就是系统在终结程序之前给程序提供的一个执行其预先设定的回调函数的机会。
下面几个小节暂时看不懂
8.3 SEH异常处理程序原理及设计
8.4 向量化异常处理
8.5 X64平台上的异常处理
8.6 异常处理程序设计中的注意事项
8.7 异常处理的实际应用
下面内容是海哥中级班的异常相关课程笔记
异常的分类:CPU产生的异常、软件模拟产生的异常