我正在尝试为可执行文件构建一个打包程序,并且有一件事我甚至在仔细阅读了pe文档之后也无法理解。对于RVA来说,(IMAGE_DIRECTORY_ENTRY_EXPORT,IMAGE_DIRECTORY_ENTRY_IMPORT等)等目录指向的是什么?
答案 0 :(得分:2)
官方PE文档由于未知原因,没有给出IMAGE_DATA_DIRECTORY.Rva字段指向的结构名称。
以下是IMAGE_DIRECTORY_ENTRY_XXX(来自winnt.h)及其相应的结构。这些结构在winnt.h中定义,除非另有说明:
// Directory Entries
#define IMAGE_DIRECTORY_ENTRY_EXPORT 0 // IMAGE_EXPORT_DIRECTORY
#define IMAGE_DIRECTORY_ENTRY_IMPORT 1 // IMAGE_IMPORT_DESCRIPTOR
#define IMAGE_DIRECTORY_ENTRY_RESOURCE 2 // IMAGE_RESOURCE_DIRECTORY
#define IMAGE_DIRECTORY_ENTRY_EXCEPTION 3 // IMAGE_RUNTIME_FUNCTION_ENTRY
#define IMAGE_DIRECTORY_ENTRY_SECURITY 4 // WIN_CERTIFICATE (wintrust.h)
#define IMAGE_DIRECTORY_ENTRY_BASERELOC 5 // IMAGE_BASE_RELOCATION
#define IMAGE_DIRECTORY_ENTRY_DEBUG 6 // IMAGE_DEBUG_DIRECTORY
#define IMAGE_DIRECTORY_ENTRY_ARCHITECTURE 7 // IMAGE_ARCHITECTURE_HEADER (Dec and Aplha processors only)
#define IMAGE_DIRECTORY_ENTRY_GLOBALPTR 8 // RVA of Global pointer (GP) for MIPS
#define IMAGE_DIRECTORY_ENTRY_TLS 9 // IMAGE_TLS_DIRECTORY[32|64]
#define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG 10 // IMAGE_LOAD_CONFIG_DIRECTORY[32|64]
#define IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT 11 // IMAGE_BOUND_IMPORT_DESCRIPTOR
#define IMAGE_DIRECTORY_ENTRY_IAT 12 // IMAGE_THUNK_DATA
#define IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT 13 // ImgDelayDescr (delayimp.h)
#define IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR 14 // IMAGE_COR20_HEADER (corhdr.h)
official PE documentation中的第2.4.3节(可选标题数据目录)中讨论了几乎所有这些结构(作为旁注,在我写这篇文章时,该部分编号错误文档版本8.3)的第2.4.3章中的表。