一、异常处理表
1.位置及概述
PE文件头可选映像头中数据目录表的第4成员IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_DIRECTORY_ENTRY_EXCEPTION]指向异常处理表,它保存在PE文件中,通常在".pdata"区段。
x86系统采用动态的方式构建SEH结构,相比而言x64系统下采用静态的方式处理SEH结构。
2.异常处理表结构
数据目录表的第四个元素指向异常表,RVA指向的是一个IMAGE_IA64_RUNTIME_FUNCTION_ENTRY的结构体,其结构如下:
typedef struct _IMAGE_IA64_RUNTIME_FUNCTION_ENTRY {
DWORD BeginAddress; //与SEH相关代码的起始偏移地址
DWORD EndAddress; //与SEH相关代码的末尾偏移地址
DWORD UnwindInfoAddress; //指向描述上面两个字段之间代码异常信息的UNWIND_INFO
} IMAGE_IA64_RUNTIME_FUNCTION_ENTRY, *PIMAGE_IA64_RUNTIME_FUNCTION_ENTRY;
BeginAddress与EndAddress之间,是异常处理函数的内容。UnwindInfoAddress指向的位置是用来描述BeginAddress与EndAddress之间的代码异常属性信息的UNWIND_INFO。UNWIND_INFO也叫作异常展开信息,此结构用来描述堆栈指针的记录属性与寄存器中保存的地址属性,它的结构体如下:
struct _UNWIND_INFO {
U