《黑客免杀攻防》读书笔记02之PE文件格式

PE文件的定义

Portable Executable(可移植的执行体),在Windows系统中,凡是可以直接以二进制形式被系统加载执行的文件都是PE文件。常见的可在执行文件(如“*.exe”文件和“文件”)

PE文件的结构

组成:DOS文件头、DOS加载模块、PE文件头、区段表和区段。
加上两个DOS相关的结构是为了兼容性问题。
整个程序以DOS文件头的MZ标志位开始。
DOS加载模块的标志性字符串:This program cannot be run in DOS mode
PE文件头:以字母PE作为开头,标准大小为224字节。E0(16)=224(10)
区段表:也称节表。由.text、.data、.rsrc组成。使PE加载器能准确快速的加载相应的区段。

关于地址

为了弄清楚PE文件地址和虚拟内存地址之间的映射关系,我们需要了解如下一些概念:
1. 文件偏移地址(File Offset):数据在文件中的地址叫做数据偏移地址。这是文件在磁盘上存放时相对于文件开头的偏移。
2. 装载基址(Image Base):PE装入内存时的基地址。默认情况下,EXE文件在内存中的基地址是0x00400000,DLL文件是0x10000000。这些位置可以通过修改编译选项更改。
3. 虚拟内存地址(Virtual Address,VA):PE文件中的指令被装入内存后的地址。
4. 相对虚拟地址(Relative Virtual Address,RVA):相对虚拟地址是内存地址相对于映射基址的偏移量。

VA=ImageBase+RVA V A = I m a g e B a s e + R V A

由于操作系统在进行装载的时“基本”上保持PE中的各种数据结构,所以文件偏移地址和RVA有很大的一致性。但是还有一些细微的差异,这些差异是由于文件数据的存放单位与内存数据存放单位不同而造成的。PE文件中数据以0x200字节为基本单位进行组织,当代码装入内存后,以0x1000字节为基本单位进行组织。由存储单位差异所引起的节基址差叫做 节偏移。
=(VA)(ImageBase)=RVA 文 件 偏 移 地 址 = 虚 拟 内 存 地 址 ( V A ) − 装 载 基 址 ( I m a g e B a s e ) − 节 偏 移 = R V A − 节 偏 移

Lord PE提供了这类地址转换。

你可能感兴趣的:(免杀)