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