PE文件结构体-IMAGE_DATA_DIRECTORY
IMAGE_OPTIONAL_HEADER结构体的最后一个成员,数组每一个元素都是该结构体
typedef struct _IMAGE_DATA_DIRECTORY { DWORD VirtualAddress;//数据起始RVA DWORD Size; //数据块长度 /*Size 这个字段记录了特定类型的数据块的长度。*/ } IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY; /*VirtualAddress 这个字段记录了特定类型数据的其实RVA。当然,针对不同的数据结构,该字段包含的是数据含义并不一样,有的数据甚至还不是RVA(如 属性证书数据中该字段表示的是FOA)*/
数组中的每一项对应一个特定的数据结构,包括导入表,导出表等等,
根据不同的索引取出来的是不同的结构,头文件里定义各个项表示哪个结构,如下面的代码所示:
#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 #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 #define IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT 13 // Delay Load Import Descriptors #define IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR 14 // COM Runtime descriptor