https://mp.csdn.net/postedit/86154806
上一篇,我们已经知道了PE结构分为两大部分,PE头和PE数据区。现在我们从PE头开始说起:
PE文件头
顾名思义这是PE文件头部,他的组成是DOS头,PE头和节表。现在我们进入DOS头。
DOS头
DOS头又分为两部分,DOS MZ头 和DOS Stub
这就是第一章PE结构图中DOS头的部分,所以说非常直观,我们可以看到有许多的字段。但是只有两个是有用的,那就是第一个MZ字段和最后一个偏移字段!
在010editor里面是这个样子,PE文件第一个字段是EXE的标志,最后一个是起始地址到PE头的偏移地址。
DOS头的定义如下
再来DOS头还有DOS Stub部分,这部分现在也是用不到了,他的作用是在DOS的环境下输出一行文字(我这时候想假设我在这段写入一些代码,应该也可以在DOS下执行),在windows环境是没有用的,所以连这个图都已经直接上了一条黑条
所以DOS头就这样学完了,是不是肥肠开心。
接下来就是要进入PE头了!
PE头
首先PE头由三个部分组成,分别是PE标志,PE标准头,PE拓展头。
他们的定义长这样子:
signature就是PE标志,这个值是固定的,4550。
接下来就是标准PE头了,
标准PE头可以看到是个结构体
大小为20个字节,记录的是PE文件的全局属性,在PE格式图中的深蓝位置
现在开始逐字段解释一下有什么用。
Machine表示运行在哪一个CPU平台,占两个字节,一般是014C表示I386,intel32位平台
NumberOfSections,pE中节的数量
现在就要解释一下什么是节:
首先为了保护数据和代码的安全,所以一般代码和数据都会分离,为了实现操作的安全和内核稳定,所以数据都会有不同的权限,比如说可读可写,可读不可写这种。
然后windows加载数据的时候就会把相同属性的数据放在一页,所以就出现了节的概念。
所以说节就是存放相同属性数据的一个位置。所以PE中节的数量就是有多少种不同属性的数据。
sizeofOptionalHeader:拓展头的大小
Characteristics:PE文件的属性,例如,DLL是0x0210,这个是属于查询性的东西,查就好,现在暂时不管。
就这样,重要的已经讲完了。
接下来就是将PE拓展头
PE拓展头
虽然叫拓展头,但是并不是可有可无的,他是非常重要的存在。
现在让我们看看他长什么狗样子 /滑稽
卧槽,这也太长了,当场去世的节奏。