注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

风雨夜归人

专业收集资料,个人爱好!

 
 
 

日志

 
 

什么是PE文件  

2009-04-11 16:16:43|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

PE文件指的是可移植可执行(Portable Executable)文件。这些文件通常是DLL和EXE文件。一个 PE 文件中可以有多个命名空间,也可以包括嵌套的命名空间。而一个命名空间可以拆分到多个 PE 文件。一个或多个 PE 文件(可能还有其它非PE文件,如资源文件)可以组合在一起创建程序集。程序集是可部署、可进行版本编号和可复用的物理单元。 rumen8.com-入门吧是最好的入门资料网站

PE文件格式的概要:

rumen8.com-入门吧,投资者入门的好帮手

DOS MZ header

rumen8.com-入门吧是最好的入门资料网站

DOS stub rumen8.com-入门吧收集整理入门资料

PE header www.rumen8.com-找入门资料就到入门吧

Section table rumen8.com-入门吧是最好的入门资料网站

Section 1 www.rumen8.com-找入门资料就到入门吧

Section 2

rumen8.com-入门吧收集整理入门资料

Section ...

rumen8.com-入门吧,投资者入门的好帮手

Section n

www.rumen8 com-入门吧-入门资料大全

PE文件结构的总体层次分布。所有 PE文件(甚至32位的 DLLs) 必须以一个简单的 DOS MZ header 开始。我们通常对此结构没有太大兴趣。有了它,一旦程序在DOS下执行,DOS就能识别出这是有效的执行体,然后运行紧随 MZ header 之后的 DOS stub。DOS stub实际上是个有效的 EXE,在不支持 PE文件格式的操作系统中,它将简单显示一个错误提示,类似于字符串 "This program requires Windows" 或者程序员可根据自己的意图实现完整的 DOS代码。通常我们也不对 DOS stub 太感兴趣: 因为大多数情况下它是由汇编器/编译器自动生成。通常,它简单调用中断21h服务9来显示字符串"This program cannot run in DOS mode"。 rumen8.com-入门吧收集整理入门资料

紧接着 DOS stub 的是 PE header。 PE header 是PE相关结构 IMAGE_NT_HEADERS 的简称,其中包含了许多PE装载器用到的重要域。当我们更加深入研究PE文件格式后,将对这些重要域耳目能详。执行体在支持PE文件结构的操作系统中执行时,PE装载器将从 DOS MZ header 中找到 PE header 的起始偏移量。因而跳过了 DOS stub 直接定位到真正的文件头 PE header。 www.rumen8.com-找入门资料就到入门吧

PE文件的真正内容划分成块,称之为sections(节)。每节是一块拥有共同属性的数据,比如代码/数据、读/写等。我们可以把PE文件想象成一逻辑磁盘,PE header 是磁盘的boot扇区,而sections就是各种文件,每种文件自然就有不同属性如只读、系统、隐藏、文档等等。 值得我们注意的是 ---- 节的划分是基于各组数据的共同属性: 而不是逻辑概念。重要的不是数据/代码是如何使用的,如果PE文件中的数据/代码拥有相同属性,它们就能被归入同一节中。不必关心节中类似于"data", "code"或其他的逻辑概念: 如果数据和代码拥有相同属性,它们就可以被归入同一个节中。(译者注:节名称仅仅是个区别不同节的符号而已,类似"data", "code"的命名只为了便于识别,惟有节的属性设置决定了节的特性和功能)如果某块数据想付为只读属性,就可以将该块数据放入置为只读的节中,当PE装载器映射节内容时,它会检查相关节属性并置对应内存块为指定属性。

www.rumen8 com-入门吧-入门资料大全

如果我们将PE文件格式视为一逻辑磁盘,PE header是boot扇区而sections是各种文件,但我们仍缺乏足够信息来定位磁盘上的不同文件,譬如,什么是PE文件格式中等价于目录的东东?别急,那就是 PE header 接下来的数组结构 section table(节表)。 每个结构包含对应节的属性、文件偏移量、虚拟偏移量等。如果PE文件里有5个节,那么此结构数组内就有5个成员。因此,我们便可以把节表视为逻辑磁盘中的根目录,每个数组成员等价于根目录中目录项。 rumen8.com-入门吧收集整理入门资料

以上就是PE文件格式的物理分布,下面将总结一下装载一PE文件的主要步骤:

rumen8.com-入门吧,投资者入门的好帮手

当PE文件被执行,PE装载器检查 DOS MZ header 里的 PE header 偏移量。如果找到,则跳转到 PE header。

rumen8.com-入门吧是最好的入门资料网站

PE装载器检查 PE header 的有效性。如果有效,就跳转到PE header的尾部。 rumen8.com-入门吧是最好的入门资料网站

紧跟 PE header 的是节表。PE装载器读取其中的节信息,并采用文件映射方法将这些节映射到内存,同时付上节表里指定的节属性。

rumen8.com-入门吧是最好的入门资料网站

PE文件映射入内存后,PE装载器将处理PE文件中类似 import table(引入表)逻辑部分。

rumen8.com-入门吧是最好的入门资料网站

上述步骤是基于本人观察后的简述,显然还有一些不够精确的地方,但基本明晰了执行体被处理的过程。 rumen8.com-入门吧收集整理入门资料

你应该下载 LUEVELSMEYER的《PE文件格式》。 该文的描述相当详细,可用作案头的参考手册。

  评论这张
 
阅读(281)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018