PE 檔案格式學習

2021-07-10 17:24:46 字數 1450 閱讀 5134

以前總在網上看看介紹pe檔案格式的文章,看的時候看到一大堆的結構體就蛋疼了,想想現在我這個居然都不清楚以後咋裝bi呢

今天下了個peview邊看變學了

先自己隨便寫個控制台程式,然後加進去就有了,讓後我們可以看看這個檔案到底是怎麼組成的。

從這個樹形結構我們能很清楚的理解這個檔案的整體構成,在網上有很多pe檔案格式的圖找一張對照看:

第乙個image_dos_header dos頭 為啥要有 就是為了相容dos

第二個mos-dos stub program dos實模式殘餘程式

第三個image_nt_headers pe檔案頭,這個裡面分幾個部分,第乙個是標誌描述檔案格式;

下乙個是真pe的檔案頭,記錄了一些這個檔案是什麼機器編出來的這些東西。可以看一下。

第三個名字叫可選pe可選頭,蛋疼。。。。它其實都在的。。。

這個裡面的內容比較重要,記錄的相信值得研究,什麼程式入口都在這裡面。東西很多沒必要都看,自己點點看下,發現還是有幾個感興趣的字段。

datadirectory 可以看下。

第四部分就是段頭,這些段頭用來描述段的一些屬性,段頭的格式大小是固定的。通過段頭就能找到對應段。

這裡面rva指定裝載這個段的虛擬記憶體位址(要加個基址) virtual size 表示段的大小。

最下面就是各種段

.edata段包含了應用程式或dll的匯出資料。在這個段出現的時候,它會包含乙個到達匯出資訊的匯出目錄。

.text段windows 3.1和windows nt之間的乙個區別就是windows nt預設的做法是將所有的**段(正如它們在windows 3.1中所提到的那樣)組成了乙個單獨的段,名為「.text」。既然windows nt使用了基於頁面的虛擬記憶體管理系統,那麼將分開的**放入不同的段之中的做法就不太明智了。因此,擁有乙個大的**段對於作業系統和應用程式開發者來說,都是十分方便的。

.text段也包含了早先提到過的入口點。iat亦存在於.text段之中的模組入口點之前。(iat在.text段之中的存在非常有意義,因為這個表事實上是一系列的跳轉指令,並且它們的跳轉目標位置是已固定的位址。)當windows nt的可執行映像裝載入程序的位址空間時,iat就和每乙個匯入函式的實體地址一同確定了。要在.text段之中查詢iat,裝載器只用將模組的入口點定位,而iat恰恰出現於入口點之前。既然每個入口擁有相同的尺寸,那麼向後退查詢這個表的起始位置就很容易了。(copy來的)

.idata段是匯入資料,包括導入庫和匯入位址名稱表。雖然定義了image_directory_entry_import,但是winnt.h之中並無相應的匯入目錄結構。作為代替,其中有若干其它的結構,名為image_import_by_name、image_thunk_data與image_import_descriptor。在我個人看來,我實在不知道這些結構是如何和.idata段發生關聯的,所以我花了若干個小時來破譯.idata段實體並且得到了乙個更簡單的結構,我名之為image_import_module_directory。

PE檔案格式

pe 的意思是 portable executable 可移植的執行體 它是 win32環境自身所帶的執行檔案格式。它的一些特性繼承自unix的coff common object file format 檔案格式。portable executable 可移植的執行體 意味著此檔案格式是跨win3...

PE檔案格式

pe檔案格式分析及修改 圖 1 2009 01 09 14 08 pe 的意思是 portable executable 可移植的執行體 它是 win32環境自身所帶的執行檔案格式。它的一些特性繼承自unix的coff common object file format 檔案格式。portable ...

PE檔案格式

pe檔案格式應用於所有32位windows系統 windows 9x,windows nt,windows 2000及windows xp vista已經對pe格式進行了公升級,也出現了pe64 而在msdn 98中有pe的大量詳細資料 按目錄 msdn library visual studio ...