RVA和RAW相互轉換

GodIand發表於2015-09-28

E.g:

+---------+---------+---------+---------+---------+---------+

|  段名稱   虛擬地址  虛擬大小  實體地址  物理大小   標誌   |
+---------+---------+---------+---------+---------+---------+
|  Name     VOffset    VSize    ROffset    RSize      Flags |
+---------+---------+---------+---------+---------+---------+
|  .text   00001000   00000092  00000400  00000200  60000020|
|  .rdata  00002000   000000F6  00000600  00000200  40000040|
|  .data   00003000   0000018E  00000800  00000200  C0000040|
|  .rsrc   00004000   000003A0  00000A00  00000400  C0000040|

+---------+---------+---------+---------+---------+---------+


檔案虛擬偏移地址和檔案物理偏移地址的計算公式如下:

>>>>>>> VA To FileOffset (虛擬地址轉檔案偏移地址)
如 VA = 00401000 (虛擬地址)
ImageBase = 00400000 (基地址)
VRk = VOffset - ROffset = 00001000 - 00000400 = C00 (得出檔案虛擬地址和檔案實體地址之間的VRk值)
FileOffset = VA - ImageBase - VRk = 00401000 - 00400000 - C00 = 400 (檔案實體地址的偏移地址)

如 VA = 00401325,則:
FileOffset = VA - ImageBase - VRk = 00401325 - 00400000 - C00 = 725

>>>>>> FileOffset To VA (檔案偏移地址轉虛擬地址)
如 FileOffset = 435 (檔案偏移地址)
VA = FileOffset + ImageBase + VRk = 435 + 00400000 + C00 = 00401035 (虛擬地址)

相關文章