PE中涉及的地址有四类:
虚拟内存地址(VA)
用户的PE文件被操作系统加载进内存后,PE对应的进程支配了自己独立的4GB虚拟空间,范围00000000h--0fffffffh。进程本身的VA被解释为:进程的基地址+相对虚拟内存地址。
相对虚拟内存地址(RVA)
进程被加载进虚拟内存后,相关的动态链接库也会被加载,这些文件称为模块。模块都有基地址,不同模块的基地址一般不同。相对虚拟内存地址,是相对于基地址的偏移,是虚拟内存中用来定位某个特定位置的地址,RVA是针对某个模块而存在的。VA是相对于整个地址空间而言的。
文件偏移地址(FOA)
和内存无关,是指某个位置距离文件头的偏移。
特殊地址
计算方法不是从文件头开始的,也不是从内存的某个基地址开始,而是某个特定位置算起。资源表中出现过这种地址,但很少见。