論用C語言寫乙個PE檔案直譯器(2)

2021-10-05 21:18:10 字數 1107 閱讀 6611

這裡我們不系統性地做知識的講解,預設大家至少已經了解了基本的pe檔案結構。那麼乙個pe檔案直譯器其實就是能夠提取檔案結構裡的各個元素,並按照其應有的意義和格式顯示出來。比如我們常用的studype就是pe檔案直譯器的一種。而檔案解釋的流程可以簡單地分為如下幾步:

(1)讀取檔案資料

(2)顯示pe檔案頭的各個元素

(3)修改特定元素

其中,關鍵之處在於我們怎麼去解釋各個元素。前文說了,檔案結構其實就是一種結構體。那麼在我們讀取檔案資料到緩衝區之後,我們用乙個對應的結構體指標指向緩衝區。或者不讀取檔案,直接用檔案指標,通過對應的結構體來進行元素解讀就可以了。而這裡有比較關鍵的一點 – 這種對應的結構體要怎麼弄?

當然啦,這不用我們自己定義的,windows在windows.h這個標頭檔案裡已經定義好了各個pe檔案的結構體,如dos頭_image_dos_header,nt頭_image_nt_headers,標準頭和可選頭_image_file_header_image_optional_header

為了方便講解,在這裡我們的例程將是乙個基於控制台的簡易pe檔案直譯器,具有的功能是顯示各個元素資訊。

(1)想好實現的途徑和使用的函式,標頭檔案

這裡我想使用檔案控制代碼來鎖定檔案和讀取檔案,那麼首先用到的標頭檔案和pe結構體一樣,都是windows.h,此外我們的輸入輸出功能和可能的格式控制,記憶體分配,那麼再加上stdio.hstring.htchar.hmalloc.h

(2)簡易地確認程式流程,確認必須變數

然後可以根據各個函式及引數,來確定一些必須變數,比如獲取檔案控制代碼需要乙個檔案路徑,乙個win32_data,讀寫檔案用的函式都需要乙個緩衝區,以及乙個沒什麼用的指標。這些都可以在開發前進行考慮,此外還可以確認一下其它的細節,比如目錄顯示的功能函式,報錯流程等等。

到這裡我們的準備其實差不多了,當然你有心的話可以按照軟體工程的一些方法進行更合理地開發,因為我這裡只是乙個小專案,因此就放上一些我自己的經驗談。

論用C語言寫乙個PE檔案直譯器(1)

因為在初學pe檔案格式的時候吃了很多的苦,這裡想用一種通俗易懂的方式來講解這麼個東西。而這第一篇,準備先不或瑣碎或系統性地講一講知識性的東西 我們來談一談pe檔案結構的本質 pe檔案的全稱是portable executable file 可移植的可執行檔案。最常見的就比如我們的exe檔案,還有如d...

論用C語言寫乙個PE直譯器(3)

可能在上篇文章中,有讀者會有疑問,可不可以用file檔案指標來進行操作呢?這麼簡單直接 理論上是可以的,但是需要知道的一點是,file其實是一種結構體,它包含了描述檔案的一些資訊。因此通過file來進行檔案操作其實會多出一些轉換。但這一點其實還好,比較重要的是,因為使用的指標是檔案指標,所以中間可能...

用rust寫乙個玩具直譯器0

假期閒來無事,看了thorsten ball的writing an interpreter in go,他還有一本寫編譯器的暫時沒看,跟著書上的 寫了一遍,想著用rust重寫一遍,現在正在寫eval部分.writing an interpreter in go 我對go的感覺如它宣傳的一般,21世紀...