PE檔案格式學習總結

2021-05-21 19:23:31 字數 2210 閱讀 5693

pe檔案被稱為可移植的執行體是portable execute的全稱,常見的exe、dll、ocx、sys、com都是pe檔案,pe檔案是微軟windows作業系統上的程式檔案(可能是間接被執行,如dll),繼承自unix的coff檔案格式.在微軟的nt c編譯器出來後微軟就使用pe檔案格式了。

************首先定位到+0h處

struct _image_dos_header_struct

************************ 中間相隔若干

************************(以下首位址由_image_dos_header_struct.e_lfanew確************************ 定)

struct _image_nt_headers

************************緊跟無需定位

struct _image_section_header(陣列);

//陣列陣列的數目由_image_nt_headers.fileheader.numberofsections決定

******************************中間間隔若干

*****************************以下首位址由_image_optional_header. *****************************image_data_directory.[2].virtualaddress

*****************************確定。

image_import_descriptor陣列若干,由最後乙個陣列內容全0結束

******************************中間間隔若干

*****************************以下首位址由_image_optional_header. *****************************image_data_directory.[1].virtualaddress

*****************************確定。

image_export_directory

1、可以通過_image_dos_header_struct的e_magic==」mz」和_image_nt_headers的signature==」pe/0/0」共同判斷是否pe檔案。

然後_image_dos_header_struct得e_lfanew的位址指向_image_nt_headers所在位址,定位_image_nt_headers後可以讀取_image_nt_headers。

3、_image_file_headers 的_image_nt_headers.fileheader.numberofsections表明檔案區塊數目。通過檔案區塊數目判斷_image_section_header的數目。讀完_image_section_header後可以直接讀若干個_image_section_header。讀出各區塊的資料描述。

4、通過_image_optional_header. image_data_directory.[1].virtualaddress指向位址定位到輸入表,然後通過firstthunk定位image_thunk_data,通過image_thunk_data.addressofdata判斷是否為按名索引。如果addressofdata最高位為0,低31位指向image_import_by_name,可以讀取函式名了。如果最高位為1則低31為為輸入表的函式編號。

5、最後通過_image_optional_header. image_data_directory.[0].virtualaddress指向位址定位到輸出表  image_export_directory.addressofnames指向輸出函式陣列位址,陣列內儲存的是指向函式名的位址。函式名的數目由numberofnames決定。

(好像這個格式現在有一點改變,好像後來對對輸入表,輸出**式有了改變。比如用vc6.0生成的檔案用,這種方法分析就不行。但是用windows ddk 3790.1830生成的sys檔案用這種格式還是能分析出來的。有點怪。

附上文中提到的檔案結構。(大部分msdn能查到,不能查到的其實也有定義,不需要自己再定義一遍),他們中的資料說明了該檔案的很多很多資訊。

源**放到csdn資源了:     

PE 檔案格式學習

以前總在網上看看介紹pe檔案格式的文章,看的時候看到一大堆的結構體就蛋疼了,想想現在我這個居然都不清楚以後咋裝bi呢 今天下了個peview邊看變學了 先自己隨便寫個控制台程式,然後加進去就有了,讓後我們可以看看這個檔案到底是怎麼組成的。從這個樹形結構我們能很清楚的理解這個檔案的整體構成,在網上有很...

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 ...