昨天看了fengmk2一篇博文:PE文件格式小炒

http://www.cnblogs.com/fengmk2/archive/2008/06/23/1228393.html

这篇博客里用实例分析了,PE文件格式,看得我心里痒痒,也说几句吧,不过我是初学者,水平可能不够,呵呵,大家一起讨论吧。

我将fengmk2画的结构图加了几个定位说明。

 

 

    Dos_stub由Dos头和一小段Dos程序组成,Dos头的长度为64字节,即从0x00000000处到0x0000003Fh处。而Dos程序的长度不定,因此在Dos头中用偏移量e_lfanew记录file-header的偏移量。下面是Dos头的定义:

 

通过e_lfanew可以定位到file_header:下面这两种方法均可:

方法1:

 

Code

0x3c即是e_lfanew的起始地址。

方法2:

 

列出NT头的定义,可以看出包列文件头和可选文件头两部分

 

Code

 

Code

 

 

Code

 

      下面我详细分析一下可选文件头,可选文件头非常重要,因此它绝对不是可选的。它包含了模块基地址、代码和数据的大小和基地址、线程堆栈和进程堆的配置等信息。最后一个成员DataDirectory数据表中,含有导入表、导出表、资源和重定位表等等重要的表项,其详细的定义如下:

Code

 

 

太长了,不想写了,估计也没有人愿意看了,下回再写吧。(^_^)

 

 

posted on 2009-03-27 13:53  CUCmehp(likesmiles)  阅读(441)  评论(0编辑  收藏  举报