1、虚拟地址VA:PE对应的进程支配了自己独立的4GB虚拟空间,在这个空间定位的地址称为虚拟地址VA。在PE中进程本身的VA被解释为:进程的基地址+相对虚拟内存地址。
2、相对虚拟内存地址:一个进程被加载内存空间后,其相关的动态库也会被加载。这些同时加载到进程虚拟地址空间的文件称为模块。每一个模块在加载时都会有一个基地址、不同模块的基地址一般是不同的。但如果两个模块的基地址相同,就有操作系统来决定这两个模块在虚拟空间中的具体位置。
相对虚拟内存地址RVA是相对于基地址的偏移,几RVA是虚拟内存中用来定位某个特定未知的,该地址的值是这个特定位置距离某个模块基地址的偏移量。所以RVA是针对某个模块而存在的。RVA和VA的概念可如下图表示:
RVA是相对于模块而言的,VA是相对于进程而言的。
3、文件偏移地址FOA:和内存无关,它是指某个位置距离文件头的偏移。
4、数据目录:Windows下的可执行文件是PE中的一种,这种文件除了包含代码及数据段的相关数据以外还包含了许多与文件执行有关的其他数据。PE中有一个数据结构称为数据目录表,其中记录了所有可能的数据类型,包括导出表、导入表、资源表等。
5、节:无论是结构化程序设计还是面向对象程序设计,都提倡程序与数据的独立性。因此程序中的代码和数据是分开存放的。为了保证程序执行的安全,保证内核的稳定,Windows操作系统通常对不同用途的数据设置不同的访问权限。如代码段中的字节码在程序运行的时候,一般不允许用户进行修改,数据段则允许在程序运行的过程中读和写,常量只能读等。Windows操作系统在加载可执行文件时,会为这些具有不同属性怼的数据分别分配标记有不同属性的页面(当然,相同属性