| 名称 | 作用 | 备注 |
|---|---|---|
| e_magic | DOS签名(4D5A) | 必须有 |
| e_lfanew | 指向NT头的偏移 | 必须有 |
| 名称 | 作用 | 备注 |
|---|---|---|
| Machine | 对应CPU的machine码 | 必须有 |
| NumberOfSections | 指出文件中存在的节区数量 | 必须有 值一定要大于0 |
| SizeOfOptionalHeader | 指出IMAGE_OPTIONAL_HEADER32结构体的长度 |
必须有 |
| CHaracteristics(结构体) | 用于标识文件的属性,文件是否是可运行的形态、是否为DLL文件等信息,以bitOR形式组合起来 | 必须有 |
| TimeDateStampA | 记录编译器创建此文件的时间 | 不影响文件运行 |
| 名称 | 作用 | 备注 |
|---|---|---|
| Magic | 指定magic码 | 必须有 为 IMAGE_OPTIONAL_HEADER32 结构体时,Magic码为 10B为 IMAGE_OPTIONAL_HEADER64 结构体时,Magic码为 20B |
| AddressOfEntryPoint | 持有EP的RVA值 指出程序最先执行的代码起始地址 |
必须有,很重要 |
| ImageBase | 指出文件的优先装人地址 | 必须有 |
| SectionAlignment | 指定了节区在磁盘文件中的最小单位 | 必须有 |
| FileAlignment | 指定了节区在内存中的最小单位 | 必须有 |
| SizeOfImage | 指定了PEImage在虚拟内存中所占空间的大小 | 必须有 |
| SizeOfHeader | 指出整个PE头的大小 | 必须有 值也必须是FileAlignment的整数倍 第一节区所在位置与SizeOfHeader距文件开始偏移的量相同 |
| Subsystem | 区分系统驱动文件(*.sys)与普通的可执行文件(*.exe,*.dll) |
必须有 |
| NumberOfRvaAndSizes | 指定DataDirectory数组的个数 | 必须有 |
| DataDirectory(结构体数组) | 由IMAGE_DATA_DIRECTORY结构体组成的数组,数组的每项都有被定义的值 |
必须有 里面包含重要的结构体,如导入导出表等 |
| 索引 | 名称 | 作用 | 是否必须 |
|---|---|---|---|
| 0 | EXPORT Directory | 导出表,存储 DLL 导出的函数信息 | 否 |
| 1 | IMPORT Directory | 导入表,存储 PE 文件所需的外部 DLL 及其函数信息 | 是 |
| 2 | RESOURCE Directory | 资源表,存储图标、字符串、对话框等资源 | 否 |
| 3 | EXCEPTION Directory | 异常表,存储异常处理相关信息 | 否 |
| 4 | SECURITY Directory | 安全表,存储数字签名和验证信息 | 否 |
| 5 | BASERELOC Directory | 重定位表,存储可执行文件在加载时所需的地址调整信息 | 否(除非使用了重定位) |
| 6 | DEBUG Directory | 调试信息表,存储调试符号和相关数据 | 否 |
| 7 | COPYRIGHT Directory | 版权表,存储软件版权信息(已废弃) | 否 |
| 8 | GLOBALPTR Directory | 全局指针表,提供特定平台的全局指针 | 否 |
| 9 | TLS Directory | 线程本地存储表,管理 TLS 变量 | 否(仅多线程程序需要) |
| A | LOAD_CONFIG Directory | 加载配置表,存储系统安全相关的配置信息 | 否 |
| B | BOUND_IMPORT Directory | 绑定导入表,优化 DLL 导入过程 | 否 |
| C | IAT Directory | 导入地址表,存储 DLL 函数的地址 | 是 |
| D | DELAY_IMPORT Directory | 延迟导入表,支持 DLL 的延迟加载 | 否 |
| E | COM_DESCRIPTOR Directory | COM 组件描述表,存储 .NET 相关信息 | 否(仅 .NET 相关程序需要) |
| F | Reserved Directory | 预留字段,无特殊用途 | 否 |
是 SectionHeader 结构体组成的数组、有 .text .data .rsrc 等
| 名称 | 作用 | 备注 |
|---|---|---|
| VirtualAddress | 指示该节加载到内存后的 起始地址(相对于ImageBase) | VA=imagebase+RVA |
| PointerToRawData | 表示 该节在磁盘文件中的物理偏移(相对于文件开头) | 文件偏移 |
| Name数组 | ||