PE文件的全称是Portable Executable,意为可移植的可执行的文件,常见的EXE、DLL、OCX、SYS、COM都是PE文件,PE文件是微软Windows操作系统上的程序文件(可能是间接被执行,如DLL)


一个可执行文件不光包括二进制的机器代码,还有许多其他信息如字串符,字体,图标等。PE文件格式规定了所有这些信息在可执行文件中如何组织。

PE文件格式把可执行文件分成若干个数据节,不同资源放在不同节中。

一个典型的pe文件中包含的节如下:

.text 由编译器产生,存放二进制的机器代码,也是我们反汇编和调试的对象

.data 初始化的数据块,如宏定义、全局变量、静态变量等

.idata 可执行文件所使用的动态链接库等外来函数与文件的信息

.rsrc 存放程序的资源,如图标、菜单等

(参考:《0day:软件漏洞分析技术》)

PE文件的结构一般如下图

  • DOS头是用来兼容MS-DOS操作系统的,目的是当这个文件在MS-DOS上运行时提示一段文字,大部分情况下是:This program cannot be run in DOS mode.还有一个目的,就是指明NT头在文件中的位置。
  • NT头包含windows PE文件的主要信息,其中包括一个‘PE’字样的签名,PE文件头(IMAGE_FILE_HEADER)和PE可选头(IMAGE_OPTIONAL_HEADER32),头部的详细结构以及其具体意义在PE文件头文章中详细描述。
  • 节表:是PE文件后续节的描述,windows根据节表的描述加载每个节。
  • 节:每个节实际上是一个容器,可以包含代码、数据等等,每个节可以有独立的内存权限,比如代码节默认有读/执行权限,节的名字和数量可以自己定义,未必是上图中的三个。

(来源:http://blog.csdn.net/evileagle/article/details/11693499)