本文主要是介绍相对虚拟地址,虚拟地址,文件偏移地址,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
相对虚拟地址(RVA,Relative Virtual Address):RVA只是内存中的一个简单相对于PE文件装入地址的偏移位置,它是一个“相对地址”,或称“偏移量”。例如,假设一个PE文件从地址400000h处装入,并且它的代码节开始于401000h,代码节的RVA将是:目标地址401000h - 装入地址400000h = RVA 1000h。
PE文件中出现RVA的概念是因为PE的内存映像和磁盘文件映像是不同的,同一数据相对于文件头的偏移量在内存中和在磁盘文件中可能是不同的,为了提高效率,PE文件头中使用的都是内存映像中的偏移量,也就是RVA。RVA仅仅是对于处于节中的数据而言的,对于文件头和节表来说无所谓 RVA和文件偏移,因为它们在被映射到内存中后不管是大小还是偏移都不会有任何改变。
装载基址(Image Base):PE文件装入内存的 基地址。默认情况下,EXE文件的基址为0x00400000,DLL文件的基址为0x10000000。
虚拟地址(VA,Virtual Address):实际的内存地址。虚拟地址(VA) = 基地址(Image Base) + 相对虚拟地址(RVA)。
文件偏移地址(FileOffset、RAW Offset):当PE文件存储在磁盘上时,某个数据的位置相对于文件头的偏移量,成为文件偏移地址(FileOffset)或物理地址(RAW Offset)。文件偏移地址从PE文件的第一个字节开始计数,起始值为0。用十六进制工具打开文件所显示的地址就是文件偏移地址。
图:PE文件磁盘与内存映像结构图
这篇关于相对虚拟地址,虚拟地址,文件偏移地址的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!