扩展PE头
PE头结构体
typedef struct _IMAGE_NT_HEADERS {
DWORD Signature; //PE头标识
IMAGE_FILE_HEADER FileHeader; //标准PE头
IMAGE_OPTIONAL_HEADER32 OptionalHeader; //扩展PE头
} IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32;
IMAGE_OPTIONAL_HEADER32 OptionalHeader 扩展PE头中的结构体成员
typedef struct _IMAGE_OPTIONAL_HEADER {
//
// Standard fields.
//
WORD Magic; //PE32:10B PE32+:20B
BYTE MajorLinkerVersion; //链接器版本号
BYTE MinorLinkerVersion; //链接器版本号
DWORD SizeOfCode; //所有代码节的总和(文件对齐后的大小 *编译器填写无实际作用)
DWORD SizeOfInitializedData; //包含所有已经初始化数据的节的部大小(文件对齐后的大小 *编译器填写无实际作用)
DWORD SizeOfUninitializedData; //包含未初始化数据的节的总大小(文件对齐后的大小 *编译器填写无实际作用)
DWORD AddressOfEntryPoint; //程序入口
DWORD BaseOfCode; //代码开始的基地(*编译器填写无实际作用)
DWORD BaseOfData; //数据开始的基地(*编译器填写无实际作用)
//
// NT additional fields.
//
DWORD ImageBase; //内存镜像基地
DWORD SectionAlignment; //内存对齐
DWORD FileAlignment; //文件对齐
WORD MajorOperatingSystemVersion; //标识操作系统版本号(主版本号)
WORD MinorOperatingSystemVersion; //标识操作系统版本号(次版本号)
WORD MajorImageVersion; //PE文件自身的版本号
WORD MinorImageVersion; //PE文件自身的版本号
WORD MajorSubsystemVersion; //运行所所需子系统版本号
WORD MinorSubsystemVersion; //运行所所需子系统版本号
DWORD Win32VersionValue; //子系统版本的值,必须为0
DWORD SizeOfImage; //内存中整个PE文件的映射的尺寸,可比实际的值大,必须是SectionAlignment的整数倍
DWORD SizeOfHeaders; //所有头+节表按照文件对齐后的大小,否则加载会出错
DWORD CheckSum; //核验和,一些系统文件有要求,用来判断文件是否被修改
WORD Subsystem; //子系统 (驱动程序1 图形界面2 控制台,DLL3 )
WORD DllCharacteristics; //文件特性 不是针对DLL文件的
DWORD SizeOfStackReserve; //初始化时保留的栈大小
DWORD SizeOfStackCommit; //初始化时实际提交的大小
DWORD SizeOfHeapReserve; //初始化时保留的堆大小
DWORD SizeOfHeapCommit; //初始化时实践提交的大小
DWORD LoaderFlags; //调试相关
DWORD NumberOfRvaAndSizes; //目录项数目
IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
} IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32;
WORD DllCharacteristics 文件值的含义
0 //保留,必须为0
1 //保留,必须为0
2 //保留,必须为0
3 //保留,必须为0
6 IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE //DLL可以在加载时被重定位
7 IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY //强制代码实施完整性验证
8 IMAGE_DLLCHARACTERISTICS_NX_COMPAT //该映像兼容DEP
9 IMAGE_DLLCHARACTERISTICS_NO_ISOLATION //可以隔离,但并不隔离此映像
10 IMAGE_DLLCHARACTERISTICS_NO_SEH //映像不使用ESH(第10章)
11 IMAGE_DLLCHARACTERISTICS_NO_BIND //不绑定映像
12 //保留,必须为0
13 IMAGE_DLLCHARACTERISTICS_WDM_DRIVER //该映像为一个WDM driver
14 //保留,必须为0
15 IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVEr_AWARE //可用于终端服务器