PE文件的装载过程(3)

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



Code
IMAGE_OPTIONAL_HEADER32 STRUCT

Magic WORD ? ; 107h=ROM Image,10Bh=exe Image
MajorLinkerVersion BYTE ? ; 链接器版本号
MinorLinkerVersion BYTE ? ;
SizeOfCode DWORD ? ; 所有含代码的节的总大小
SizeOfInitializedData DWORD? ; 所有含已初始化数据的节的总大小
SizeOfUninitializedData DWORD ? ; 所有含未初始化数据的节的大小
AddressOfEntryPoint DWORD ? ;程序执行入口RVA
BaseOfCode DWORD ? ;代码的节的起始RVA
BaseOfData DWORD ? ;数据的节的起始RVA
ImageBase DWORD ? ;程序的建议装载地址
SectionAlignment DWORD ? ;内存中的节的对齐粒度
FileAlignment DWORD ? ;文件中的节的对齐粒度
MajorOperatingSystemVersion WORD ? ;操作系统主版本号
MinorOperatingSystemVersion WORD ? ;操作系统副版本号
MajorImageVersion WORD ? ;可运行于操作系统的最小版本号
MinorImageVersion WORD ? ;
MajorSubsystemVersion WORD ?;可运行于操作系统的最小子版本号
MinorSubsystemVersion WORD ? ;
Win32VersionValue DWORD ? ;未用
SizeOfImage DWORD ? ;内存中整个PE映像尺寸
SizeOfHeaders DWORD ? ;所有头+节表的大小
CheckSum DWORD ? ;
Subsystem WORD ? ;文件的子系统
DllCharacteristics WORD ? ;
SizeOfStackReserve DWORD ? ;初始化时的堆栈大小
SizeOfStackCommit DWORD ? ;初始化时实际提交的堆栈大小
SizeOfHeapReserve DWORD ? ;初始化时保留的堆大小
SizeOfHeapCommit DWORD ? ;初始化时实际提交的堆大小
LoaderFlags DWORD ? ;未用
NumberOfRvaAndSizes DWORD ? ;下面的数据目录结构的数量
DataDirectory IMAGE_DATA_DIRECTORY 16 dup(<>) ;
IMAGE_OPTIONAL_HEADER32 ENDS



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

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结构组成,用来定义不同用途的数据块在内存中的偏移和大小

0 0 0
http://www.zeroplace.cn/article.asp?id=281
PE文件的装载过程(1)
http://www.zeroplace.cn/article.asp?id=282
PE文件的装载过程(2)
http://www.zeroplace.cn/article.asp?id=283
PE文件的装载过程(3)
http://www.zeroplace.cn/article.asp?id=284
PE文件的装载过程(4)

(请您对文章做出评价)

文章来自: 本站原创
Tags:
评论: 0 | 查看次数: 7923