如果有初始值,初始值是存在pe檔案中的。
在檔案中和在記憶體中的對齊方式不一樣。
!!!有些情況下記憶體對齊和檔案對齊一樣的也需要計算才能找到對應的位置!!!
記憶體中展開從imagebase(擴充套件pe頭中)開始,然後依次對齊。
rva:
相對虛擬位址
=記憶體中的位址-imagebase
foa:
file offset address
轉化:
1.判斷rva是不是在頭部,如果在直接查
2.判斷當前的值在哪乙個節裡面,與節表中的vritualaddress進行比較
如果在,用rva-節.virtualaddress算出偏移
foa = 節.pointertorawdata + 偏移
反過來的轉化同理~
over.
PE檔案學習 RVA與FOA轉換
當我們的pe檔案沒有被裝載到記憶體中的時候,它是以什麼樣的儲存方式在磁碟中儲存呢?當被裝載到記憶體之後,pe檔案的內容又是什麼樣的光景呢?今天我們說的重點就是rva和foa的轉換,之前我們已經知道pe檔案在磁碟檔案中的對齊粒度是0x200,在記憶體中的對齊粒度是0x1000,我們來看一張 windo...
RVA與FOA的轉換
1.pe程式加載入記憶體後頭的位址與檔案中一致,但對齊方式 偏移 不同 2.結構體 typedef struct image section header misc dword virtualaddress 節區的rva位址 dword sizeofrawdata 在檔案中對齊後的尺寸 dword ...
RVA與FOA的轉換
我們執行程式可以看見相應的值,那麼我們可以是否可以在檔案中直接搜尋對應的值然後修改呢?這種方法沒有毛病,但是檔案中也許會存在很多個0x12345678,你無法準確的知道哪乙個才是全域性變數 那麼,又是否可以通過已經給出的這個位址0x42ba30直接去尋找呢?當然也是不行的,因為在之前章節的學習中我們...