RVA和RAW(檔案偏移)的轉換

2021-09-24 08:50:13 字數 667 閱讀 7710

節表和節——rva和檔案偏移的轉換 

rva和檔案偏移的轉換的轉換演算法

(1)迴圈掃瞄節表並得到每個節在記憶體中的起始rva(根據virtualaddress欄位),並根據節的大小(sizeofrawdata欄位)算出節的結束rva,最後比較判斷目標rva是否落在某個節之內。

(2)如果目標rva處於某個節之內,那麼用目標rva減去節的起始rva,這樣就得到了目標rva相對於節起始位址的偏移量rva'。

(3)在節表中獲取節在檔案中所處的偏移(pointertorawdata欄位),將這個偏移值加上上一步得到的rva'值,這才是資料在檔案中的真正偏移位置。

raw cinfector ::rva2raw( rva rva)

}return (m_psectionstart[i].pointertorawdata + rva - m_psectionstart[i].virtualaddress);

}

pointertorawdata(節在檔案中所處的偏移)是節在檔案中的起始位置

rva - m_psectionstart[i].virtualaddress   總的位址---起始位址     是一段長度

PE檔案結構 RVA與FOA的轉換

如果有初始值,初始值是存在pe檔案中的。在檔案中和在記憶體中的對齊方式不一樣。有些情況下記憶體對齊和檔案對齊一樣的也需要計算才能找到對應的位置!記憶體中展開從imagebase 擴充套件pe頭中 開始,然後依次對齊。rva 相對虛擬位址 記憶體中的位址 imagebase foa file offs...

RVA與FOA的轉換

1.pe程式加載入記憶體後頭的位址與檔案中一致,但對齊方式 偏移 不同 2.結構體 typedef struct image section header misc dword virtualaddress 節區的rva位址 dword sizeofrawdata 在檔案中對齊後的尺寸 dword ...

RVA與FOA的轉換

我們執行程式可以看見相應的值,那麼我們可以是否可以在檔案中直接搜尋對應的值然後修改呢?這種方法沒有毛病,但是檔案中也許會存在很多個0x12345678,你無法準確的知道哪乙個才是全域性變數 那麼,又是否可以通過已經給出的這個位址0x42ba30直接去尋找呢?當然也是不行的,因為在之前章節的學習中我們...