筆記 二進位制檔案

2022-08-29 20:36:24 字數 1311 閱讀 9341

pe(portable exec utable)是 win32 平台下可執行檔案遵守的資料格式。常見的可執行檔案(如「*.exe」檔案和「*.dll」檔案)都是典型的 pe 檔案。

pe 檔案格式把可執行檔案分成若干個資料節(section),不同的資源被存放在不同的節中。

乙個典型的 pe 檔案中包含的節如下。

除此以外,還可能出現的節包括「.reloc」、「.edata」、「.tls」、「.rdata」等。

如果可執行檔案經過了「加殼」處理,pe 的節資訊就會變得非常「古怪」。 在 crack 和反病毒分析中需要經常處理這類古怪的 pe 檔案。

windows 的記憶體可以被分為兩個層面:物理記憶體和虛擬記憶體。其中,物理記憶體比較複雜,需要進入windows 核心級別 ring0 才能看到。通常,在使用者模式下,我們用偵錯程式看到的記憶體 位址都是虛擬記憶體。

windows 的記憶體管理機制在很大程度上與日常生活中銀行所起的金融作用有一定的相似性,我們可以通過乙個形象的比方來理解虛擬記憶體。

(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

由於作業系統在進行裝載時「基本」上保持 pe 中的各種資料結構,所 以檔案偏移位址和 rva有很大的一致性。之所以說「基本」上一致是因為還有一些細微的差異。這些差異是由於檔案資料的存放單 位與記憶體資料存放單位不同而造成的。

(1)pe 檔案中的資料按照磁碟資料標準存放,以 0x200 位元組為基本單位進行組織。因此 pe 資料節的大小永遠是 0x200 的整數倍。

(2)當**裝入記憶體後,將按照記憶體資料標準存放,並以 0x1000 位元組為基本單位進行組織。因此,記憶體中的節總是 0x1000 的整數倍。

那麼檔案偏移位址與虛擬記憶體位址之間的換算關係可以用下面的公式來計算。

檔案偏移位址= 虛擬記憶體位址(va)−裝載基址(image base)−節偏移

= rva -節偏移

二進位制檔案

本質上是文字檔案是把檔案資訊先轉化成以字元編碼的ascii碼,再儲存ascii的二進位制 而二進位制檔案是直接把檔案資訊編碼成二進位制儲存。因此在讀取的時候要考慮記憶體中二進位制 應該怎麼樣解釋。二進位制檔案的讀取是是要告訴元素的型別 編碼方式 文字檔案則預設為char型別。文字檔案是一種特殊的二進...

二進位制檔案

二進位制檔案 也叫型別檔案 二進位制檔案是由一批同一型別的資料組成的乙個資料序列,就是說乙個具體的二進位制檔案只能存放同一種型別的資料。type tmember record name string 10 email string 20 posts longint end var members a...

二進位制檔案

二進位制檔案 也叫型別檔案 二進位制檔案是由一批同一型別的資料組成的乙個資料序列,就是說乙個具體的二進位制檔案只能存放同一種型別的資料。type tmember record name string 10 email string 20 posts longint end var members a...