PE文件结构

PE文件是Windows操作系统下使用的可执行文件格式。它是微软在UNIX平台的COFF(Common Object File Format,通用对象文件格式)基础上制作而成的。最初(正如Portable这个单词所代表的那样)设计用来提高程序在不同操作系统上的移植性,但实际上这种文件格式仅用在Windows系列的操作系统下。

PE文件是指32位的可执行文件,也称为PE32。64位的可执行文件称为PE+或PE32+,是PE文件的一种扩展形式(请注意不是PE64)。
下图是PE文件的整体结构:
在这里插入图片描述

大致包含:DOS头、PE头、节区头、各个节区等

windows在将PE文件加载到内存时,会对各个节区进行重新定位。文件默认对齐200h,在内存中的默认对齐是1000h。多出来的空间用0来填充。下图就是PE加载的内存分布。
在这里插入图片描述
下图展示了较为详细的PE结构体定义:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

下面介绍几个关键结构:
1.IMAGE_DOS_HEADER:DOS头结构

0x00 	e_magic;		// DOS signature:4D5A("MZ")
0x3C	e_lfanew;		// offset to NT header	这个变量是NT头结构的偏移值

2.IMAGE_NT_HEADERS:NT头结构

typedef struct _IMAGE_NT_HEADERS{
    DWORD Signature;                   //PE Signature:50450000("PE"00)
    IMAGE_FILE_HAEADER FileHeader;
    IMAGE_OPTIONAL_HEADER32 OptionalHeader;
}IMAGE_NT_HEADER32, *PIMAGE_NT_HEADERS32;

3.IMAGE_FILE_HAEADER:文件头

0x00 	Machine;				//每个CPU都拥有唯一的Machine码,其中I386/IA64常用
0x02	NumberOfSections;		//节区的个数
0x10	SizeOfOptionalHeader;	//IMAGE_OPTIONAL_HEADER32 结构的长度
0x12 	Characteristics;		//文件的属性,0x0002可执行、0x2000DLL文件

4.IMAGE_OPTIONAL_HEADER32:可选头

0x00	Magic:					//32位10B、64位20B
0x10	AddressOfEntryPoint;	//EP,程序入口点(最先执行的地方)
0x1C	ImageBase:				//基址
0x44	Subsytem;	//用来区分驱动和普通文件的。如:1:驱动sys。2:notepad.exe。3:cmd.exe控制台
0x60	DataDirectory;			//数据目录,其中包含了导入、导出和资源等数据表地址。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孤月丶星辰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值