PE學習筆記1


學習筆記來源《Windows.PE權威指南》這本書

與PE相關概念

地址

VA(Virtual Address):虛擬內存地址
RVA(Relative Virtual Address):相對虛擬內存地址
FOA(File Offset Address):文件偏移地址
特殊地址

擴展

分頁機制原理:操作系統處理程序時,假設該程序獨立擁有4GB內存,但是按照某個固定的大小(如4KB)將這4GB空間分成N個頁(1M);在處理進程的某個時刻,卻只有一部分與物理內存對應,未與物理內存對應的頁面被標記爲髒(dirty),一般存儲在一個名爲"交換文件"的磁盤文件中。在WindowsXP系統中,交換文件名爲"pagefile.sys":當系統讀取未在內存中的數據時,它將內存中不常讀寫的頁交換出來,再將要讀取的,位於交換文件中的頁換進內存。
這樣子就能夠實現將一個進程有用比實際內存大得多的內存,而這種管理機制下又稱爲虛擬內存。

虛擬內存VA

PE文件被操作系統加載進了內存,該PE對應的進程支配自己獨立的4GB虛擬空間。範圍:00000000h-0fffffffh
VA = 進程的基地址 + 相對虛擬內存地址

相對虛擬內存地址RVA

模塊的概念:隨着一個進程被加載到虛擬內存空間,相關的動態鏈接庫也會被加載,即同時被加載到進程地址空間的文件稱爲模塊。
每一個模塊都會有一個基地址,在4GB的空間裏存儲。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-bcdVm4D6-1571059551781)(en-resource://database/2212:1)]
RVA相對模塊,VA相對整個地址空間

文件偏移FOA

與內存無關,指某個位置距離文件頭的偏移。

特殊地址

計算方法是從某個特定的位置算起,在PE結構中很少見,在資源表裏出現過。

數據目錄

PE中一個數據結構叫做數據目錄,其記錄了可能的數據類型。目前一定義的有15種:包括導入表,導出表,資源表,異常表,屬性證書表,重定位表,調試數據,Architecture,Global Ptr,線程局部存儲,加載配置表,綁定導入表,IAT,延遲導入表和CLR運行時頭部。

Windows操作系統對不同用途的數據設置不同的訪問權限,爲不同屬性數據分配標記不同屬性的頁面,確保程序運行時安全。
節:存放不同類型數據,如代碼,數據,常量,資源等,不同節具有不同的訪問權限。
節是PE文件中存放代碼或數據的基本單元。
從操作系統加載角度看待節,節是相同屬性數據的組合,比如可讀,只寫等。

對齊

PE中規定了三類對齊:數據在內存中的對齊,數據在文件中的對齊,資源文件中資源數據的對齊。
內存對齊
Windows操作系統對內存屬性的設置以頁爲單位。
那麼節在內存中對齊單位至少是一個頁的大小,對32位而言是,值是4KB(1000h),對64位而言是8KB(2000h)
文件對齊
通常以一個物理扇區的大小作爲對齊粒度,即512字節(200h)。
處於節約資源的考慮,允許節在內存和文件中對齊尺寸不一致,一般PE在內存中的尺寸比在文件中尺寸大。
如果內存對齊被定義爲小於操作系統頁的大小,則文件對齊和內存對齊的值必須一致。
資源數據的對齊
資源字節碼部分一般要求以雙字(4字節)方式對齊。

PE文件結構

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-0vijsgbm-1571059551784)(en-resource://database/2214:1)]
通過DOS Header中的最後一個字段e_lfanew的值可以定位到PE頭的起始位置。
PE_Start = Dos MZ基地址 + IMAGE_DOS_Header.elfanew
DOS MZ 頭的大小是64個字節(0x3c)
PE頭的大小由IMAGE_FILE_HEADER.SizeOfoptionalHeader確定
一個節的大小40字節(0x28),節表大小 = 節 * 節的數量,節的數量由IMAGE_FILE_HEADER.NumberOfSections確定
PE文件頭 = DOS頭 + PE頭
節表是所有節的目錄。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章