lordPE转自http://blog.sina.com.cn/s/blog_6e8f83bc01014115.html

来源:互联网 发布:电大网站美工设计基础 编辑:程序博客网 时间:2024/05/17 09:15

EntryPoint: 入口点,程序在执行时的第一行代码的地址应该就是这个值

 

ImageBase: 基地址,文件执行时将被映射到指定内存地址中,这个初始内存地址称为基址。基地址的值由PE文件本身设定的,按默认设置,Visual C++建立的exe文件基地址是00400000h,DLL文件的基地址是1000000h,但是在创建应用程序的exe文件的时候可以改变这个地址。方法是在链接应用的时候使用链接程序的/BASE选项。

      即exe文件在内存的00400000h地址处装入,dll文件在内存的10000000h地址处装入

  基地址即映射文件的起始地址被称为模块句柄,可以通过模块句柄访问内存中的其他数据结构。

  相对于基地址,PE文件的每个区块都有装入地址,由于区块的大小是要对齐的,每一个区块从对齐值的倍数的偏移位置开始,而区块的实际代码或数据的大小不一定刚好是这么多,所以在不足的地方一般用00h来填充,这就是区块间的间隙。

     FileAlignment:定义了磁盘区块的对齐值,这个值必须是2的幂,其最小值为200h(512byte)。

     SectionAlignment:定义了内存中区块的对齐值,每个区块被装入的地址必定是本字段指定数值的整数倍

  内存区块的对齐值(SectionAlignment)在x86系列CPU中,页是按4KB(1000h)来排列的。当磁盘对齐值不是内存页1000h,而是200h时,就存在文件偏移地址与虚拟地址的转换问题,这样不同区块在磁盘与内存中的差值不一样。

 

SizeOfImage:映像装入内存后的总尺寸。它指装入文件从ImageBase到最后一个块的大小,最后一个块根据其大小往上取整。

      当FileAlignment=SectionAlignment,SizeOfImage只会比exe文件小。即磁盘与内存的对齐值相同,而磁盘文件还有不能映射的部分,所以SizeOfImage只会比较小。

 

BaseOfCode:代码段的起始RVA(相对虚拟地址),比如基地址为00400000h,代码段的RVA为1000h,则代码段是装入00401000h目标地址处。这个目标地址被称为虚拟地址(VA)--即实际的内存地址。

 

BaseOfData:数据段的起始RVA,数据段通常是在内存的末尾,即在Code Section之后。在64位可执行文件中是不出现的。

 

Magic:是一个标记字,0107h---ROM映像;010Bh---普通可执行映像;020Bh---PE32+。一般为010Bh即普通可执行映像。

 

Subsystem:一个标明可执行文件所期望的子系统(用户界面类型)的枚举值,这个值只对exe是重要的。

          2--表示图形接口子系统

 

NumberOfSections:区块(Section)的数目。

 

TimeDateStamp:表明文件是何时被创建的。

 

SizeOfHeaders:是MS-DOS头部,PE头部,区块表的组合尺寸。这个三个项目都出现在PE文件中任何代码或数据区块之前。

 

Characteristis:文件属性。该字段是一组指出块属性(如代码/数据/可读/可写等)的标志。

               0100h---目标平台为32位机器

               0002h---文件可执行

 

CheckSum:映像的校验和。

 

NumberOfRvaAndSizes:数据目录的项数。一直是16

数据目录表,由数个相同的IMAGE_DATA_DIGECTORY结构组成,指向输出表、输入表、资源块等数据。

 

Directories按钮:打开数据目录表查看面板,包含每个表的地址(RVA)和大小。

阅读全文
0 0
原创粉丝点击