-------------------------------相对虚拟地址 --------------------------------------------------
在可执行文件中,有很多地方需要指明内存中的地址,例如:引用全局变量时,需要制定它的地址。PE文件的尽管有一个首选的载入地址,但是,它们可以再入到进程的空间的任何地方,所以不能依赖于PE的载入点,由于这个原因,必须有一个方法来指定地址而不依赖PE载入点的地址。
为了在PE文件中 避免所有的内存地址,出现了相对虚拟地址。其概念是:内存中的一个简单的相对于PE文件载入地址时的偏移位置。它是一个“相对”地址,或者称为:偏移量。例如,假设一个EXE文件从地址400000h处载入,并且它的代码区块位于401000h,代码区块的相对虚拟地址为:
目标地址401000h - 载入地址 40000000h = 相对虚拟地址 1000h
将一个虚拟地址转换成真实的地址,只是简单的翻转这个过车个:将实践的装入的地址加上相对虚拟地址 即可得到实际的内存地址,顺便说下,在PE里面,实际的内存地址被称作为虚拟地址,另外,也可以把虚拟地址想象为加上首选装入地址的相对虚拟地址。不要忘了,前面提到的装入地址等同于模块句柄。她们呢之间的关系如下:
虚拟地址 = 基地址 + 相对虚拟地址。
------------------------文件偏移地址 --------------------------------------------------
当PE文件存储在磁盘上时,某个数据的位置相对于头文件的偏移量,称为文件的偏移地址或者物理地址。文件偏移地址从PE文件的第一个直接开始计数,起始值为0。用16进制工具打开文件显示的地址就是文件偏移地址。
~~~~~~~~~~~~~~~~~~~~续~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~