首页 > 编程知识 正文

Windows pe文件,pe用什么文件系统

时间:2023-05-06 15:17:36 阅读:285305 作者:4156

可执行文件结构是操作系统的根基,Windows系统下面有很多类型不同的文件,例如*.ex,*.dll,*.sys,*.ocx等文件格式都遵从PE文件结构的约定。

PE文件实在win32位系统中诞生的,而且与win64位系统中的可执行文件格式基本相同。

在Windows系统中,可以以二进制形式被系统加载执行的文件都是PE文件。

PE文件就是Portable Executable(可移植执行体)的简写,它是win32系统环境自身所带的可执行文件格式。可移植执行体,就意味着这个文件格式是跨win32平台的,换句话说,就是Windows运行在非Intel的CPU上,任何win32平台PE文件装载器都能够识别和使用这个文件格式,所以所以win32平台下的可执行文件也必须使用PE格式。

结构?

PE文件总的来说就是由DOS文件头,DOS加载模块,PE文件头,区段表和区段这5部分构成的。当然很多朋友会疑问,就是Windows系统下面的一个文件格式为什么会有两个与DOS相关的结构呢?其实如果PE文件运行在Windows系统下面,那么DOS文件头和DOS加载模块是压根用不到的,PE加载器会根据DOS文件头最后面那个标志跳过DOS加载模块而直接转到PE文件头上,其实有两个DOS相关的模块完全就是问了兼容问题考虑的,如果将PE文件在DOS系统下面运行的话,那么就到DOS加载模块表现的时候到了,DOS加载模块就会显示一句话:this program cannot be run in dos mode,翻译一下就是这个程序不能在DOS系统下面运行。

下面是我偷来的一张图片显示了PE文件的基本结构

通过上面的图片我们可以发现整个程序是以DOS文件头的MZ标志开始的,就是图中蓝色标记那里,接下来就是DOS加载模块了(用紫色线框住),看到那一句标志性的语句没有?this program must be run under win32,其实意思和我们上面说的那一句this program cannot be run in DOS mode是一模一样的啊!每个Windows程序差不多都是一样的信息。

下面还有一个以字母PE开头的(红色框住),就是我们前面说的PE文件头了。PE文件头的标准大小就是224字节。

再往下面就是.text,.data.rsrc.等构成的区段表了,区段表也叫做节表,我偷的那张图没有表示出来呀,节表的作用就相当于一本书的目录,能帮助PE加载器准确而快速地加载相应的区段。

我们通过区段名称就可以大体猜出这个区段里面包含了什么信息,起什么作用....,因为PE文件的区段名称都是有相应的约定的,但是也可以被他人修改掉而不守约定。

 

一个可执行文件不但包括可执行的二进制代码,而且还包括一些其它东西,比如菜单啊图标啊位图啊字符串啊等等。

PE文件格式很好地规定了这些信息在文件中是如何组织的。因此在程序被执行的时候系统会按照OE文件格式约定准确地定位文件中各种类型的资源,并将其准确地装入不同的内存区域中

PE文件格式如下

DOS MZ header dos文件头DOS stub dos加载模块PE header pe文件头section table 区段表section 1 区段1section 2 区段2.....section n 区段n

DOS MZ header:也叫DOS文件头或者DOS MZ文件头,它是以字母MZ开头的数据,在它的偏移量3C处包含着我PE文件头的起始位置信息。

DOS stub:就是DOS加载模块,以一段this program cannot be run in DOS mode为标志,当程序试图运行在DOS系统下会出现这句话。

PE header:我们要重点研究的PE文件头,它是一段以PE字母开头的数据,默认224字节,包含了很多信息。

section table:区段表,又叫节表,是一段记录这个程序中区段大小、位置与属性的表。

section 1:区段1,又叫做节,有很多的节,每个节都包含了各种不同的数据。

一个典型的PE文件包含以下区段:

.text区段 存放可执行的二进制代码区段

.data区段 初始化数据块,比如全局变量

.idata区段 程序所使用的动态链接库等外接函数和文件信息。

.rsrc区段 存放程序的资源,图标,菜单

但这些区段的名称都是可以在编译程序的时候手动设置,所以有时候不可靠。

最后为大家献上一张PE结构完整解析图

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。