記憶體位址重對映的選項 PE檔案與虛擬記憶體之間的對映

2021-10-14 12:10:25 字數 1215 閱讀 5033

在除錯漏洞時,可能經常需要做這樣兩種操作。(1)靜態反彙編工具看到的pe檔案中某條指令的位置是相對於磁碟檔案而言的,即所謂的檔案偏移,我們可能還需要知道這條指令在記憶體中所處的位置,即虛擬記憶體位址(va)。

(2)反之,在除錯時看到的某條指令的位址是虛擬記憶體位址,我們也經常需要回到pe檔案中找到這條指令對應的機器碼。

為此,我們需要弄清楚pe檔案位址和虛擬記憶體位址之間的對映關係。首先,我們先看幾個重要的概念。

(1)檔案偏移位址(file offset)

資料在pe檔案中的位址叫檔案偏移位址,個人認為叫做檔案位址更加準確。這是檔案在磁碟上存放時相對於檔案開頭的偏移。

(2)裝載基址(image base)

pe裝入記憶體時的基位址。預設情況下,exe檔案在記憶體中的基位址是0x00400000,dll檔案是0x10000000。這些位置可以通過修改編譯選項更改。

(3)虛擬記憶體位址(virtual address,va)

pe檔案中的指令被裝入記憶體後的位址。

(4)相對虛擬位址(relative virtual address,rva)

相對虛擬位址是記憶體位址相對於對映基址的偏移量。

虛擬記憶體位址、對映基址、相對虛擬記憶體位址三者之間有如下關係。

va=image base+rva

如圖1所示,在預設情況下,一般pe檔案的0位元組將對映到虛擬記憶體的0x00400000位置,這個位址就是所謂的裝載基址(image base)。

檔案偏移是相對於檔案開始處0位元組的偏移,rva(相對虛擬位址)則是相對於裝載基址0x00400000處的偏移。由於作業系統在進行裝載時「基本」上保持pe中的各種資料結構,所以檔案偏移位址和rva有很大的一致性。

之所以說「基本」上一致是因為還有一些細微的差異。這些差異是由於檔案資料的存放單位與記憶體資料存放單位不同而造成的。

(1)pe檔案中的資料按照磁碟資料標準存放,以0x200位元組為基本單位進行組織。當乙個資料節(section)不足0x200位元組時,不足的地方將被0x00填充;當乙個資料節超過0x200位元組時,下乙個0x200塊將分配給這個節使用。因此pe資料節的大小永遠是0x200的整數倍。

(2)當**裝入記憶體後,將按照記憶體資料標準存放,並以0x1000位元組為基本單位進行組織。類似的,不足將被補全,若超出將分配下乙個0x1000為其所用。因此,記憶體中的節總是0x1000的整數倍。

PE檔案的記憶體對映

如果想要理解pe檔案與虛擬記憶體之間的對映關係,首先要理解一些概念 1.檔案偏移位址 file offset pe檔案資料在硬碟中存放的位址就叫做檔案偏移位址。用winhex程式檢視檔案時的offset就是檔案偏移位址了。檔案偏移位址就是指檔案在磁碟上存放時相對於檔案開頭的偏移。2.裝載基址 ima...

PE檔案到記憶體的對映

在執行乙個pe檔案的時候,windows 並不在一開始就將整個檔案讀入記憶體的,二十採用與記憶體對映檔案類似的機制。也就是說,windows 裝載器在裝載的時候僅僅建立好虛擬位址和pe檔案之間的對映關係。當且僅當真正執行到某個記憶體頁中的指令或者訪問某一頁中的資料時,這個頁面才會被從磁碟提交到物理記...

S5PV210的記憶體位址對映詳解

s5pv 210 屬於 arm cortex a8架構,32 位cpu cpu 設計時就有 32 根 位址線 32 根 資料線 32 位址線 決定了 cpu 位址空間 為 4g 2 32 次方 sfrs 256m 位址 dram1 記憶體第乙個插槽 1g 外界記憶體 dram2 512m 記憶體 1...