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

 

posted @ 2020-01-30 17:00  AGB  阅读(885)  评论(0编辑  收藏  举报