名称 | 作用 | 备注 |
---|---|---|
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数组 | ||