PE文件详解 - 数据目录表
1、数据目录表
-
数据目录表:是PE文件中各种数据结构的索引目录,由数个相同的IMAGE_DATA_DIRECTORY结构组成
-
重点字段:导出表/导入表/重定位/IAT
- Export Directory 导出表目录 : 用于导出此映像中的函数示例符号,以便于其他应用可通过此导出符号调用此映像的函数示例(大多用于DLL文件)
- Import Directory 导入表 : 用于导入此映像
- Base Relocation Table 重定位表 : 保存着需要执行重定位的代码偏移信息
- Import Address Table IAT导入地址表 : 保存导入函数的真正地址
-
代码表示
// 数据目录表
typedef struct _IMAGE_DATA_DIRECTORY{
DWORD VirtualAddress; // 数据块的起始RVA地址
DWORD Size; // 数据块的长度
}IMAGE_DATA_DIRECTORY,*PIMAGE_DATA_DIRECTORY;
- 数据目录表在Win32 SDK中使用了一组宏来表示不同成员的信息
// Directory Entries
#define IMAGE_DIRECTORY_ENTRY_EXPORT 0 // Export Directory 导出表目录
#define IMAGE_DIRECTORY_ENTRY_IMPORT 1 // Import Directory 导入表
#define IMAGE_DIRECTORY_ENTRY_RESOURCE 2 // Resource Directory 资源表
#define IMAGE_DIRECTORY_ENTRY_EXCEPTION 3 // Exception Directory 异常表
#define IMAGE_DIRECTORY_ENTRY_SECURITY 4 // Security Directory 安全证书表
#define IMAGE_DIRECTORY_ENTRY_BASERELOC 5 // Base Relocation Table 重定位表
#define IMAGE_DIRECTORY_ENTRY_DEBUG 6 // Debug Directory 调试信息表
// IMAGE_DIRECTORY_ENTRY_COPYRIGHT 7 // (X86 usage)
#define IMAGE_DIRECTORY_ENTRY_ARCHITECTURE 7 // Architecture Specific Data 版权所有表
#define IMAGE_DIRECTORY_ENTRY_GLOBALPTR 8 // RVA of GP 全局指针表
#define IMAGE_DIRECTORY_ENTRY_TLS 9 // TLS Directory TLS(线程本地存储表)
#define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG 10 // Load Configuration Directory 加载配置表
#define IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT 11 // Bound Import Directory in headers 绑定导入表
#define IMAGE_DIRECTORY_ENTRY_IAT 12 // Import Address Table // IAT(导入地址表)
#define IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT 13 // Delay Load Import Descriptors 延迟导入表
#define IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR 14 // COM Runtime descriptor COM表
推荐阅读: