PE檔案學習 RVA與FOA轉換

2021-10-04 15:06:44 字數 443 閱讀 7763

當我們的pe檔案沒有被裝載到記憶體中的時候,它是以什麼樣的儲存方式在磁碟中儲存呢?當被裝載到記憶體之後,pe檔案的內容又是什麼樣的光景呢?

今天我們說的重點就是rva和foa的轉換,之前我們已經知道pe檔案在磁碟檔案中的對齊粒度是0x200,在記憶體中的對齊粒度是0x1000,我們來看一張《windows pe權威指南》中的:

從上圖我們可以看出pe檔案的頭+節表在記憶體和檔案中的大小是一樣的,只不過會在對齊粒度的影響下,在後面填充位元組,之後節中的資料因為偏移的不同,節中資料的位址受到了影響。

計算方法:

foa = pimage_section_header->pointertorawdata+ ( rva - pimage_section_header->virtualaddress)

**例項:

word sectionnumber

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直接去尋找呢?當然也是不行的,因為在之前章節的學習中我們...