昨天看了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:
0x3c即是e_lfanew的起始地址。
方法2:
列出NT头的定义,可以看出包列文件头和可选文件头两部分
}
}
}
下面我详细分析一下可选文件头,可选文件头非常重要,因此它绝对不是可选的。它包含了模块基地址、代码和数据的大小和基地址、线程堆栈和进程堆的配置等信息。最后一个成员DataDirectory数据表中,含有导入表、导出表、资源和重定位表等等重要的表项,其详细的定义如下:
太长了,不想写了,估计也没有人愿意看了,下回再写吧。(^_^)