【发布时间】:2015-04-13 20:52:34
【问题描述】:
我正在尝试为可执行文件构建一个打包程序,即使在仔细阅读了 pe doc 之后,我仍然无法理解一件事。 (IMAGE_DIRECTORY_ENTRY_EXPORT、IMAGE_DIRECTORY_ENTRY_IMPORT 等)等目录指向什么 RVA?
【问题讨论】:
标签: executable portable-executable
我正在尝试为可执行文件构建一个打包程序,即使在仔细阅读了 pe doc 之后,我仍然无法理解一件事。 (IMAGE_DIRECTORY_ENTRY_EXPORT、IMAGE_DIRECTORY_ENTRY_IMPORT 等)等目录指向什么 RVA?
【问题讨论】:
标签: executable portable-executable
由于未知原因,官方 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 节(可选标题数据目录)中进行了讨论(作为旁注,在我写这篇文章时,该节在本章的表格中编号错误2.4.3 用于文档版本 8.3)。
【讨论】: