论用C语言写一个PE文件解释器(1)

论用C语言写一个PE文件解释器(1)

因为在初学PE文件格式的时候吃了很多的苦,这里想用一种通俗易懂的方式来讲解这么个东西。
而这第一篇,准备先不或琐碎或系统性地讲一讲知识性的东西;我们来谈一谈PE文件结构的本质

1.什么是PE文件?

PE文件的全称是 Portable Executable File – 可移植的可执行文件。最常见的就比如我们的exe文件,还有如dll,sys,com文件。

2.为什么一个文件是PE文件?判断依据是什么?

一个文件之所以能被称之为是PE文件,又或者是图像文件,是因为其的文件格式能够遵循某种文件的格式的规范。又或者说,该文件在HEX视角下的数据排列,能够符合某种文件的数据排列标准。 如下图:

论用C语言写一个PE文件解释器(1)_第1张图片
论用C语言写一个PE文件解释器(1)_第2张图片这里可以很清楚的看到,我们的exe文件和png文件都有一些很特别的部分。比如开头都有几个很特别的字符。这些字符组成了 MZPNG
而且也从数据排列上看的出来,文件的组成是有一定的特点的。那么这个特点就是我们能对PE文件进行解析,或者说解释的关键。
而这个特点也就像我们前面所不停提到的 – 文件的数据排列具有一种很特别的格式,这种格式是这种文件所独有的

那么这种格式怎么为我们所用呢?这里我们可以想一想,数据排列的格式和特点是什么。
首先,排列就要有顺序,不同的元素的位置肯定是固定,或者是相对固定的。其次,数据的宽度也应该是固定的。就比如我们的一个数组或者结构体,数据的宽度要是不匹配的话会很头疼的。并且,不同数据肯定是对应不同的信息,而不同的信息所占的宽度也应该是不同的。那么这里就不能用上面的数组来解释了对不对,因为数组元素的宽度都是固定的。因此,那么,这种数据的排列实际上可以就用一个特别的结构体完美地来代表。也就是文件的结构实际上也就是一种结构体。

你可能感兴趣的:(编程,PE,c语言,数据结构)