天天看點

PE檔案格式詳解(0)

0.介紹     PE是Windows作業系統性愛使用的可執行檔案格式。它是微軟在UNIX平台的COFF(Common Object File Format,通用對象格式)基礎上而成的( 在Windows開發環境中,PE格式也稱為 PE/COFF 格式。 )。最初(正如Portable這個單詞所代表的那樣)設計用來提高程式在不同作業系統上的移植性,但實際上這種檔案格式僅使用在Windows系列的作業系統。     PE檔案是指32位的可執行檔案,也稱為PE32。 64位的可執行檔案稱為PE+或PE32+,是PE(PE32)的一種擴充形式(注意不是PE64) 。 事實上,一個檔案是否是PE檔案與其擴充名無關,即表明PE檔案可以是任何擴充名。 1.PE檔案格式     PE檔案格式種類:                        可執行系列:EXE/SCR                        驅動程式系列:SYS/VXD                        庫系列:DLL/OCX/CPL/DRV                        對象檔案系列:OBJ          注:嚴格來講,OBJ(對象)檔案之外的所有檔案都是可執行的。DLL/SYS檔案等雖然不能直接在Shell(Explorer.exe)中運作,但可以使用其他方法(調試器、服務等)執行。 2.基本結構     從DOS頭(DOS Header)到節區頭(Section Header)是PE頭部分,其下的節區合成PE體。檔案中使用偏移(offset),記憶體中使用VA(Vitual Address,虛拟位址)來表示位置。檔案加載到記憶體時,情況就會發生變化(節區的大小、位置等)。檔案的内容一般可分為代碼(.text)、資料(.data)、資源(.rsrc)節,分别儲存。          注:有不同種開發工具(VB/VC++/...)與編譯選項,節區的名稱、大小、個數、儲存的内容都是不同的。 它們根據不同的用途分類儲存到不同的節中。      各節區頭定義了各節區在檔案或記憶體中的大小、位置、屬性等 。      PE頭 與各節區的尾部存在一個區域,稱為NULL填充(NULL padding)。 (PE檔案中檔案/記憶體中節區的起始 位置應該在各檔案/記憶體最小機關的倍數位置之上,空白區域将用NULL填充。)

PE檔案格式詳解(0)

3.VA&RVA VA 指的是程序虛拟記憶體的絕對位址,RVA(Relative Virtual Address,相對虛拟位址)指從某個基準位置(ImageBase)開始的相對位址。VA與RVA滿足下面的換算關系。 RVA+ImageBase=VA PE頭内部大多都以RVA形式存在,原因在于,PE檔案(主要是DLL)加載到程序虛拟記憶體的特定位置時,該位置可能已經加載了其他的PE檔案(DLL)。此時必須通過重定位将其加載到其他空白的位置,若PE頭資訊使用的是VA,則無法正常通路。是以使用了RVA來定位資訊,即使發生了成定位,隻要相對于基準位置的相對位址沒有變化,就能正常通路到指定資訊,就不會出現任何問題。

繼續閱讀