Java教程

扩展PE头

本文主要是介绍扩展PE头,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

扩展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			//可用于终端服务器
这篇关于扩展PE头的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!