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 //可用于终端服务器