PE文件的装载过程(3)

紧接着IMAGE_FILE_HEADER结构的是IMAGE_OPTIONAL_HEADER32结构,这个结构称为可选头, 其中定义了很多重要的信息,可选头的结构如下所示:

 

Code

这个结构中重要的元素有如下几个:

AddressOfEntryPoint:指出了可执行代码入口点在内存中的偏移(RVA),这个偏移是相对文件本装入内存以后此入口点相对文件头的偏移,由于PE文件在磁盘中和在内存中的对齐粒度不一样,一般情况下文件在内存中的对齐力度是1000h,而在磁盘中的对齐粒度是200h,也就是说文件在内存中占用的空间一般会大于在文件中占用的空间,所以导致可执行代码入口点的偏移在内存中和在磁盘中不同。

ImageBase:文件优先装入地址,对exe文件来说为400000h,对dll一般为10000000h,且一般情况下对exe文件不需要重定位文件在内存中位置,即文件优先装入地址为ImageBase地址,而dll很难满足。

SectionAlignment:文件在内存中的对齐粒度,即每个节在内存中的装入地址必须是本值的整数倍,值一般为1000h

FileAlignment:文件在磁盘中的对齐粒度,意义同SectionAlignment,值一般为200h

Subsystem:对windows下应用程序来说,如果程序是图形界面,其值为2,如果是控制台程序,值为3

DataDirectory:由16个IMAGE_DATA_DIRECTORY结构组成,用来定义不同用途的数据块在内存中的偏移和大小

posted @ 2009-05-31 14:44  认真做人,认真做事  阅读(742)  评论(0编辑  收藏  举报