S.l.e!ep.¢%

像打了激速一样,以四倍的速度运转,开心的工作
简单、开放、平等的公司文化;尊重个性、自由与个人价值;
posts - 1098, comments - 335, trackbacks - 0, articles - 1
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

PE格式概貌

Posted on 2009-09-07 22:21 S.l.e!ep.¢% 阅读(308) 评论(0)  编辑 收藏 引用 所属分类: PE

PE格式概貌  
  以下只是PE格式的大致结构请跟着本教程一步步理解他们吧!  
  +---------------+  
  |   DOS   MZ   header   |    
  +---------------+  
  |   DOS   stub             |  
  +---------------+    
  |   PE   header           |  
  +---------------+  
  |   Section   table   |  
  +---------------+    
  |   Section   1           |  
  +---------------+  
  |   Section   2           |  
  +---------------+    
  |   Section   ...       |  
  +---------------+  
  |   Section   n           |  
  +---------------+    
  1)   DOS   MZ   header  
  这一模块有64个字节(我所看到的大都如此),我们所关心的是开始和结尾的四个字节.  
  开始的四个字节是16   BIT的标志位   IMAGE_DOS_HEADER   4D   5A(ASC2码就是'MZ')  
  这就和BMP文件以'BM'为起始一样仅作标识,了解即可.查看一下刚才打开的文件(以后例子)  
  在文件最开始就能看见4D   5A(MZ)  
  最后的四个字节是从文件起始到PE   header模块的偏移量.例子中是E0   00   00   00(对于  
  格式我们最关心的不就是偏移量吗?还不记住?)。  
   
  2)   DOS   STUB  
  这一模块没有什么好说的.实际上是个有效的   EXE,在不支持   PE文件格式的操作系统中,  
  它将简单显示一个错误提示,类似于字符串   "This   program   requires   Windows"  
   
  3)   PE   header  
  这一模块比较重要.他包含很多重要的信息(如:支持在什么样的机器上运行,有多少section  
  是可执行文件还是DLL等.这个模块的起始地址可由DOS   MZ   header模块的的最后四个字节读出。  
  如读到的是   E0   00   00   00   则此模块的起始地址是0000000E,这样PE   LOADER可根据此地址跳过  
  DOS   STUB直接定位到此模块。  
   
  4)   section   table  
  PE格式真正的内容都是以   section为单位的,section   table是一个结构数组,该数组中成员的  
  个数就是该文件的SECTION个数,由PE   header模块读出。每个SECTION对应一个结构其  
  包含对应节的属性、文件偏移量、虚拟偏移量等。  
   
  5)   以下就是各个SECTION的内容了  
   
  了解了大概的模块让我们看看PE   LOADER的装载顺序(以下摘自iczelion的PE教程)  
   
  .当PE文件被执行,PE装载器检查   DOS   MZ   header   里的   PE   header   偏移量。  
  如果找到,则跳转到   PE   header。    
  .PE装载器检查   PE   header   的有效性。如果有效,就跳转到PE   header的尾部。    
  .紧跟   PE   header   的是节表。PE装载器读取其中的节信息,并采用文件映射方法将这些节映射到内存,  
  同时付上节表里指定的节属性。    
  .PE文件映射入内存后,PE装载器将处理PE文件中类似   import   table(引入表)逻辑部分。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/dennishan/archive/2008/10/09/3043667.aspx


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理