00 PE文件结构

一、什么是PE文件结构?
可执行文件指的是由操作系统进行加载执行的文件,而PE文件结构就是Windows下可执行文件的格式,同样ELF(Executable and Linking Format)文件结构就是linux下可执行文件的格式;PE是 Potable Executable的首字母缩写,从其名字直译的话会以为它是一个跨平台的可执行体格式,其实它只是在Windows系列的任何平台上执行,那什么人应该学习PE文件结构呢?我觉得任何人都应该学习一下PE文件结构,每天用着Windows电脑办公,难道我们就没有对这些可执行文件排版感兴趣过吗?
二、如何识别PE文件?
当我们看到一只猫的时候,我们之所以认出它是一只猫,是因为猫有其自由特特征。同样要识别PE文件,我们也需要知道PE文件有哪些特征。首先我们可以通过后缀名如.exe .dll .sys等来初步识别,注意这里只是初步识别,因为后缀名并不能证明文件是PE文件。既然后缀名并不能证明文件是PE文件,那么什么才能证明文件是PE文件呢?答案是PE指纹。那什么是PE指纹?
要了解这个,一种笨办法当然是打开多个可执行程序体查看其二进制,总结归纳它的特点咯;但我们人都是懒的也是聪明的,所以我们更好的方式就是查看PE文件格式规范。在VS帮助里搜索PE format就能找到它的相关信息。从文档中我们知道,要看一个文件是否是PE文件,首先我们看文件头部两个字节是不是十六进制的4D 5A(即MZ据说是),然后跳到文件3C处查看3C处的值,再根据这个值从文件头便宜这个值得地方验证是否有两字节为50 45 (即PE),这就是所谓的PE指纹。如下图,我们用二进制文本查看器打开一个.exe文件来说明:
在这里插入图片描述
下面来看一张PE结构整体结构图:
在这里插入图片描述
DOS部分主要是为了兼容,当Windows程序在DOS下运行的时候给出一个提示;
PE文件头部分主要给Windows用的;
块表或节表:类似一个说明书,定义了节或块中存放什么数据,从哪开始存等信息;
节或块:这里就是存的实际数据了。
当然后面还有调试信息,发布版一般就不包括了。

猜你喜欢

转载自blog.csdn.net/lifeshave/article/details/85872733
00