SEH
结构化异常处理,与函数相关
/EHa 编译选项开启异步异常处理(Debug版默认开启)
高级语言中异常是不可修复的,一般用来体面退出的
异常分派的顺序:SEH、筛选器、系统,之前会给调试器
SEH的分类
1. Per-Thread类型SEH(也称为线程异常处理),用来监视某线程代码是否发生异常。
2. Final类型SEH(也称为进程异常处理、筛选器或顶层异常处理),用于监视整个进程中所有线程
是否发生异常。在整个进程中,该类型异常处理过程只有一个,可通过
SetUnhandledExceptionFilter 设置。
相关数据结构
TEB
线程信息块TIB
Fs:[0] 总是指向TEB,即总是指向当前线程的TIB,其中0偏移的指向线程的异常链表,即
ExceptionList 是指向异常处理链表(EXCEPTION_REGISTRATION结构)的一个指针。
typedef struct _NT_TIB {
struct _EXCEPTION_REGISTRATION_RECORD *ExceptionList; // +0 异常处理的链表
PVOID StackBase;
PVOID StackLimit;
PVOID SubSystemTib;
union {
PVOID FiberData;
DWORD Version;
};
PVOID ArbitraryUserPointer;
struct _NT_TIB *Self;
} NT_TIB;
评论0