关于PE文件,网上有很多资料,我们初学者基本都很难弄明白,被那些名词弄得头昏。我这里也还是要先说明下这些名词的概念。

(1)**文件偏移地址(Offset):**数据在PE文件中的地址。所谓的PE文件,就是我们的Exe文件或者DLL文件,这个文件偏移地址就是它在文件中的地址,就是它在这个文件在磁盘上存放时相对于文件开头的偏移。

(2)装载地址(Image Base),也就是所谓的内存基址: PE纹状装载到内存时的基地址。默认情况下,EXE文件在内存中的基地址是0x00400000,DLL文件是0x10000000。这些位置是可以通过修改编译选项更改的。

(3)**虚拟内存地址(Virtual Address,VA):**就是所谓的VA,是PE文件中的指令被装入内存后的地址

(4)**相对虚拟地址(Relative Virtual Address,RVA):**是虚拟内存地址相对于装载地址的偏移量。

虚拟内存地址、映射基址、相对虚拟内存地址三者之间的关系是: 虚拟内存地址 = 映射基址(装载地址) + 相对虚拟地址 ** VA=Image Base+RVA;**

从网上盗了张图:关系如下

PE文件结构
PE文件结构

今天先到这里,下次继续。