PE解析器的編寫(一) 總體說明

2022-06-24 19:15:14 字數 1544 閱讀 4997

之前自己學習了pe檔案的格式,後來自己寫了個pe檔案的解析器,這段時間工作上剛好要用到它,老闆需要能檢視某個exe中載入的dll的乙個工具,我在使用之前自己寫的這個東西的時候,發現很多東西都忘記了,所以,我在這回顧下當時的思路,並記錄下來,方便以後直接使用。也算是回顧下之前學習的內容,將學的東西學以致用

工具總體分為這樣幾個部分:

1. 檔案頭的資訊

2. pe檔案節表的資訊

3. pe檔案資料目錄表的資訊

4. 簡單的從rva到frva的計算

工具主要採用mfc的框架作為介面,pe檔案的解析部分完全由自己編寫,主要使用了windows中定義的一些結構體。剛開始開啟介面時,所有功能按鈕和顯示介面都為空,當我們正確載入乙個pe檔案後這些按鈕就都可以使用。載入後效果如圖:

兩側顯示pe檔案的基本資訊,比如檔案頭部中的資訊,檔案的oep,基位址等等,右側提供乙個根據rva計算它在檔案中偏移的功能,工具可以顯示資料目錄表的資訊和節表的資訊。

顯示節表的資訊如下:

顯示資料目錄表的資訊如下:

一般在資料目錄表中關心匯出匯出表,所以這個工具也提供了匯入匯出表的解析功能。

下面是檢視匯入表的功能:

這個主要分為兩個部分,上部分是它匯入的dll檔案,當點選某個dll的時候,會將這個dll中的函式給列舉出來。

匯出表的介面如下:

在這個介面中主要顯示這個dll模組的名稱,其中匯出的函式等資訊。

以上是程式的主要功能,下面說下程式各個模組的組成:

這個是工具中的主要對話方塊資源,從上到下依次是關於(這個是mfc自己生成的,我只是將它的版本資訊作了修改)、顯示資料目錄表資訊的對話方塊,它對應的是第三個圖、用來顯示檔案具體標識資訊的對話方塊、顯示節區表資訊的對話方塊、顯示匯出表對話方塊、顯示匯入表對話方塊、顯示pe檔案頭資訊的對話方塊,是程式的主介面;

我們為每乙個對話方塊都關聯了乙個類,然後在專門寫了乙個解析pe檔案中各種資訊的類,這樣整體的類檢視如下:

到此,我對這個工具中的模組作了簡單的說明,後面會一一講解各個部分的實現。敬請期待!!!!o(∩_∩)o

程式原始碼在此

PE解析器的編寫(三) 區塊表的解析

pe檔案中所有節的屬性都被定義在節表中,節表由一系列的image section header結構排列而成,每個結構用來描述乙個節,結構的排列順序和它們描述的節在檔案中的排列順序是一致的。具有相同屬性的資料被安排到同乙個區塊中。區塊表的結構為image section header,在pe檔案中存在...

PE解析器的編寫(三) 區塊表的解析

pe檔案中所有節的屬性都被定義在節表中,節表由一系列的image section header結構排列而成,每個結構用來描述乙個節,結構的排列順序和它們描述的節在檔案中的排列順序是一致的。具有相同屬性的資料被安排到同乙個區塊中。區塊表的結構為image section header,在pe檔案中存在...

編寫簡單的shell命令解析器

編寫簡單的shell命令解析器 環境 redhat 9.0 核心 2.4.20 vi 文書編輯器 6.1.320 gcc 3.2.2 5 實現步驟 第0步 寫乙個最簡單的shell命令直譯器,本程式取自apue例1 5,命令不能帶引數。需要完成的內容如下 命令直譯器首先是乙個死迴圈。列印乙個命令提示...