1、异常的分类
<1>CPU产生的异常(如除0)
<2>软件模拟产生的异常(如C++中的异常)
2、CPU异常的产生
CPU指令检测到异常(如除0)
查IDT表,执行中断处理函数
CommonDispatchException(把异常相关的一些信息存储到一个结构体中)
KiDispatchException(分发异常,目的是找到异常处理函数)
3、CommonDispatchException函数分析
该函数构造了一个_EXCEPTION_RECORD结构体
kd> dt _EXCEPTION_RECORD
ntdll!_EXCEPTION_RECORD
+0x000 ExceptionCode : Int4B //异常代码
+0x004 ExceptionFlags : Uint4B //异常状态
+0x008 ExceptionRecord : Ptr32 _EXCEPTION_RECORD //下一个异常
+0x00c ExceptionAddress : Ptr32 Void //异常发生地址
+0x010 NumberParameters : Uint4B //附加参数个数
+0x014 ExceptionInformation : [15] Uint4B //附加参数指针