PE文件格式(加密与解密3澳门游戏网站大平台:

《软件漏洞分析技术》笔记

本次的了解主要讲解 PE的基本概念、MS-DOS文件头、PE文件头、区块、输入表、输出表等。

PE文件:

这里我将会结合一个简单的小程序来加深我对PE文件结构的了解。

  PE(Portable Executable)是win32平台下可执行遵守的数据格式。平时常见的比如*.exe和*.dll都是PE文件。

 

  可执行文件:包含二进制代码,字符串,菜单,图标,位图字体等。

使用学习工具:有StudyPE、LordPE、PEID。

  运行时操作系统会按PE文件的约定定位资源并装载入内存。可执行文件 ——>拆分——>若干数据节<——不同的资源。

 学习PE建议看书。。和自己动手。。。

  典型PE文件通常包含:.text(编译器产生,存放二进制代码, 反汇编和调试的对象)、.data(初始化数据块)、.idata(使用的外来函数如动态链接库与文件信息)、.rsrc(存放程序资源),还包括其他如.reloc、.edata、.tls、.rdata等。

 

虚拟内存:

PE文件:

  Windows内存:1.物理内存层面;2.虚拟内存层面。

  在WIN上,32位的可执行文件是PE文件,64位的是PE32+文件 ,DLL文件的格式和PE格式差不多,唯一的区别是PE和DLL的有一个字段标识这个文件是EXE还是DLL。

  物理内存通常内核级别ring0才能看到;通常用户模式下看见的为Windows用户态内存映射机制下的虚拟内存。

  澳门游戏网站大平台 1

  内存管理器可以使进程在实际只有512MB物理内存的情况下使进程“认为”自己拥有4GB内存(其中包括代码, 栈空间,资源区,动态链接库等)。

如上就是一个PE文件的结构图,PE文件使用的是一个平面地址空间,所有的数据都融合在一起,文件的内容又被分割为不同的区块(Section),

澳门游戏网站大平台 2

各个区块按页的边界来对齐。每个块都有自己的属性(是否可读,是否可写,是否可执行等等)。

  这种情况和实际生活中银行相似,你需要用的钱其实并不等于你拥有的财富,银行实际存有的金额数小于所有储户的财富和。

 

  那万一有用户需要取出超出实际金额数怎么办,操作系统原理中有“虚拟内存”概念, 即在这种情况下有时会将“部分硬盘空间”暂时作为内存使用。(两者“虚拟内存“概念对象不一,不宜混淆)

基地址:

PE文件与虚拟内存之间的映射

      当PE文件被装载器装载了之后,内存中的板块被称为模块。映射文件的起始地址被称为模块句柄---内存中的模块代表这进程从这个可执行文件中所需要的代码、数据、资源、输入表、输出表及其他东西所使用的东西放在一个连续的内存块中。在装载中,PE文件的一个字段会告诉系统把文件映射到内存需要多少内存,不能被映射的数据被放置在文件的尾部。

  (1).文件偏移地址(File Offset):数据在PE文件中的地址,在磁盘上存放时相对于文件开头的偏移。

      在WIN32中,可以使用HMODULE GetModuleHandle(LPCTSTR lpModuleName)来获得一个模块的名称。当传递一个可执行文件或者DLL作为参数,

  (2).装载基址(Image Base):PE装入内存时的基地址。默认EXE文件在内存中的基地址为0x00400000,DLL为0x10000000。当然位置可由编译选项更改。

如果系统成功找到这个文件,就会返回该可执行文件或者DLL文件映像加载到的基地址。

  (3).虚拟内存地址(Virtual Address,VA):PE文件中的指令被装入内存后的地址。

      在PE文件中,有一个字符设置了基地址,VC++建立的exe文件的基地址是0x00400000h,DLL文件的基地址是0x10000000h。

  (4).相对虚拟地址(Relative Virtual Address,RVA):内存地址相对于映射基址(即装载基址)的偏移量。

 

  VA、Image Base、RVA之间关系:

相对虚拟地址:

        VA = Image Base + RVA;

    为了让程序的载入更加的灵活-也为了在PE文件中出现有确定的内存地址,出现了相对虚拟地址(Relative Vritual Address, RVA),当你的程序加载后,假设你的text块的RVA = 0x00001000h,映射到程序中时,VA(虚拟地址) = ImagineBase(基地址)+RVA(相对虚拟地址),你的代码区块在内存中就开始与0x00401000h。

  可理解为: 实际 = 基点 + 位移.

 

  默认情况下:一般PE文件的0字节 =》虚拟内存0x00400000位置,即所谓的装载地址。

文件偏移地址:

 

    因为我们的文件是存储在磁盘上的,某个数据相对于文件头的偏移量就是这个数据的偏移地址,称为文件偏移地址(File Offset)或者物理地址(RAW Offset),偏移地址的起始值是0。

  装载PE文件时,文件偏移地址(磁盘上)与RVA(内存上)有很大一致性(操作系统会尽量保持PE中各数据结构),那同样会有细微差异,由文件数据和内存数据的存放单位不同造成。

 

  在PE文件中,以磁盘数据标准存放(我们知道硬盘以一个section为基本单位,即512byte),0x200字节,当一个数据节不足0x200字节时填充0x00;

MS-DOS头部(IMAGE_DOS_HEADER):

本文由最新澳门网站网址游戏发布于产品展示,转载请注明出处:PE文件格式(加密与解密3澳门游戏网站大平台:

您可能还会对下面的文章感兴趣: