博客网 >

PE文件格式
作者:分类:默认分类标签:

PE(portable executable)文件格式是win32平台下的可执行代码格式,包括可执行文件、DLL和内核驱动程序等,也可以在obj和lib文件中使用。PE的跨平台是指符合该格式的文件可以在任意cpu平台下被windows装载和执行。PE格式继承自UNIX平台下的COFF,最早是由MS提出的,并在1993年被TIS(主要成员包括MS、Intel、IBM、Borland等)标准化。

还是先来看看PE文件的基本格式吧:

+-------------------+
| MZ-header       |
+-------------------+
| DOS-stub         |
+-------------------+
| file-header       |
+-------------------+
| optional header   |
+-------------------+
| section headers   |
+-------------------+
| section 1         |
+-------------------+
| section 2         |
+-------------------+
| ...                    |
+-------------------+
| section n         |
+-------------------+
PE文件的起始部分是MZ头,称为IMAGE_DOS_HEADER结构,其中有PE头的偏移量标识。

接着,便是一段可执行的MS-DOS代码(stub),使得PE文件在DOS环境中仍然能被执行。这一段通常是由编译器自动生成,通过调用INT 21H的功能9来输出一个程序必须在win32环境下运行的信息。

然后便是文件头了,这一部分被称为IMAGE_NT_HEADER结构,包含了许多PE装载器需要用到的信息,如PE文件标志等。

PE的真正内容存放在节(section)中,每节中存放一些拥有共同属性的数据,如可执行代码、初始化数据等。并且,节的信息由节头(section header)进行标识。

以上便是PE文件的基本格式描述,下面来看看装载PE文件的主要步骤:
1、检查MZ-header是否有效及PE-header的偏移量,若正确则跳转至PE-header。
2、检查PE-header的有效性,若正确则跳转到头的尾部。
3、读取section headers的信息,将节的内容映射到内存,并附上节属性。
4、处理逻辑部分,并开始执行程序。

P.S. 所有关于PE的结构定义都可以在头文件winnt.h中找到。

<< PKI体系十大缺陷(上) / 程序员进阶六大步 >>

专题推荐

不平凡的水果世界

不平凡的水果世界

平凡的水果世界,平凡中的不平凡。 今朝看水果是水果 ,看水果还是水果 ,看水果已不是水果。这境界,谁人可比?在不平凡的水果世界里,仁者见仁,智者见智。

中国春节的那些习俗

中国春节的那些习俗

正月是农历新年的开始,人们往往将它看作是新的一年年运好坏的兆示期。所以,过年的时候“禁忌”特别多。当然,各个地方的风俗习惯不一样,过年的禁忌也是不一样的。

评论
0/200
表情 验证码:

Romeo

  • 文章总数0
  • 画报总数0
  • 画报点击数0
  • 文章点击数0
个人排行
        博文分类
        日期归档