PE头

26 篇文章 2 订阅


· 在这里插入图片描述

一、PE头

typedef struct _IMAGE_NT_HEADERS {
    DWORD Signature;				//PE标识(4字节)
    IMAGE_FILE_HEADER FileHeader;			//标准PE头(20字节)
    IMAGE_OPTIONAL_HEADER32 OptionalHeader;	//扩展PE头(默认224字节)
} IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32;

PE标识:

PE标识不能破坏,操作系统在启动一个程序的时候会检测这个标识。

二、标准PE头

ypedef struct _IMAGE_FILE_HEADER {
    WORD    Machine;			//可以运行在什么样的CPU上   任意:0    Intel 386以及后续:14C   x64:8664  
    WORD    NumberOfSections;	//表示节的数量
    DWORD   TimeDateStamp;		//编译器填写的时间戳 与文件属性里面(创建时间、修改时间)无关
    DWORD   PointerToSymbolTable;//调试相关
    DWORD   NumberOfSymbols;	//调试相关
    WORD    SizeOfOptionalHeader;//可选PE头的大小(32位PE文件:0xE0  64位PE文件:0xF0)
    WORD    Characteristics;	//文件属性
} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;

WORD Characteristics含义表
在这里插入图片描述

三、扩展PE头

typedef struct _IMAGE_OPTIONAL_HEADER {
    WORD    Magic;		//PE32:10B     PE32+:20B
    BYTE    MajorLinkerVersion;		//链接器版本号
    BYTE    MinorLinkerVersion;		//链接器版本号
    DWORD   SizeOfCode;		//所有代码节的总和   文件对齐后的大小  编译器填的  没用
    DWORD   SizeOfInitializedData;	//包含所有已经初始化数据的节的总大小  文件对齐后的大小 编译器填的  没用
    DWORD   SizeOfUninitializedData;	//包含未初始化数据的节的总大小 文件对齐后的大小 编译器填的  没用
    DWORD   AddressOfEntryPoint;	//程序入口
    DWORD   BaseOfCode;		//代码开始的基址,编译器填的   没用
    DWORD   BaseOfData;		//数据开始的基址,编译器填的   没用
    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)  控制台、DLL(3)
    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;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值