逆向編譯器的設計與製作

(徐慶鐘, 民國83年6月)

逆向編譯是編譯的反向動作, 它將低階程式自動轉換, 重組出高階程式。這種技術可用來將非結構化的程式轉換成結構化; 也可以做為初學者程式的評估與軟體品質的檢驗。 此外, 它還可以用來協助反仿冒。

在本篇論文中, 我們明確地定義出表示執行流程的資料結構--"流程圖", 以及表示程式語法的資料結構--"語法圖", 我們分析逆向編譯的複雜過程, 將它規劃為四大轉換步驟, 一個機器語言程式先經"輸入轉換"化為流程圖,再經"控制流轉換"與"資料流轉換"逐步 化為語法圖, 最後再由"輸出轉換"化為高階程式。我們引用編譯理論中"自然迴域"的處理法來辨認 流程圖內的迴域, 並改良共頭反向邊的處理法。我們提出控制流轉換的演算法, 並明確 討論其中的主要轉換程序。

基於前述架構, 我們已用C語言寫了一個逆向編譯器的雛型。限於人力, 資料流轉換的 部份暫時列為後續工作。此系統經過測試, 證明在功能上、效率上都相當優良。


回首頁