二进制文件概述

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

PE文件:

  PE(Portable
Executable)是win32阳台下可举办遵循的数量格式。平日广大的比如*.exe和*.dll都是PE文件。

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

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

  典型PE文件一般包含:.text(编译器发生,存放二进制代码,
反汇编和调剂的目的)、.data(开首化数据块)、.idata(使用的外来函数如动态链接库与公事音信)、.rsrc(存放程序资源),还包括其他如.reloc、.edata、.tls、.rdata等。

虚拟内存:

  Windows内存:1.大体内存层面;2.虚拟内存层面。

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

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

图片 1

  这种情形和实在生活中银行一般,你需要用的钱其实并不等于你所有的财物,银行其实拥有的金额数仅次于所有储户的财富和。

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

PE文件与虚拟内存之间的炫耀

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

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

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

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

  VA、Image Base、RVA之间涉及:

        VA = Image Base + RVA;

  可领略为: 实际 = 基点 + 位移.

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

 

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

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

  而在内存中,则以0x1000字节(4byte)为基本单位开展集体,其他与前者类似。

 

  在展开File
Offset和VA换算时,会由存储单位引起节基址差称为节偏移。比如:

图片 2

  则有:

图片 3

  那么就足以测算出:

  FileOffset = VA – Image Base -节偏移

        = VA – Image Base – (相对虚拟偏移量 – 文件偏移量)

  按上表,比如统计虚拟内存中0x00404141处的一条指令,要换算出该指令在文书中的偏移量:

      文件偏移量 = 0x00404141 – 0x00400000(默认的Image
Base)-(0x1000 – 0x400)(代码存于.text文件中) = 0x3541

 

  一些PE工具也提供这类地址转化:Lord PE.

 =_=..

相关文章