x86 反彙編/簡介
這本書介紹瞭如何將 x86 機器碼反彙編成人類可讀的組合語言,以及如何將 x86 彙編程式碼反編譯成人類可讀的 C 或 C++ 原始碼。有些主題適用於所有計算機體系結構,不僅僅是 x86 相容機器。
這本書將深入探討 x86 機器碼和彙編程式碼的反彙編和反編譯。我們將研究使用匯編器和編譯器製作程式的方式,並檢查從 C 或 C++ 原始碼生成彙編程式碼的方式。利用這些知識,我們將嘗試逆轉這個過程。透過檢查常見結構(如資料和控制結構),我們可以找到有助於我們快速反彙編和反編譯程式的模式。
這本書適合擁有 x86 彙編和 C 或 C++ 程式設計經驗的本科生讀者。這本書並非旨在教授組合語言程式設計、C 或 C++ 程式設計或編譯器/彙編器理論。
讀者應該對x86 彙編、C 程式設計以及可能C++ 程式設計有透徹的理解。這本書旨在加深讀者對 x86 機器碼、x86 組合語言和 C 程式語言之間關係的理解。如果您不太熟悉這些主題,您可能需要在繼續學習之前重新閱讀上面提到的書籍。
計算機程式最初是用人類可讀的程式碼形式編寫的,例如組合語言或高階語言。然後,這些程式被編譯成一種稱為機器碼的二進位制格式。這種二進位制格式對人類來說是不可讀或不可理解的。許多程式(例如惡意軟體、專有商業程式或非常老舊的遺留程式)可能沒有可供您使用的原始碼。
程式經常執行需要重複的任務,或者需要與其他程式互動。如果沒有原始碼和足夠的文件,這些任務可能難以完成。本書概述了嘗試將可執行檔案的原始機器碼轉換為等效的組合語言程式碼和高階語言 C 和 C++ 程式碼的工具和技術。有了用於執行特定任務的高階程式碼,以下幾件事就成為可能
- 程式可以透過在不同的環境中編譯原始碼移植到新的計算機平臺。
- 可以確定程式使用的演算法。這允許其他程式使用相同的演算法,或者更新版本的程式可以在無需跟蹤舊原始碼副本的情況下重寫。
- 使用者可以識別和修補安全漏洞,而無需訪問原始原始碼。
- 可以為舊程式實現新的介面。可以在舊元件之上構建新元件,以加快開發時間並減少重寫大量程式碼的需要。
- 我們可以弄清楚一段惡意軟體的作用。我們希望這能讓我們找到阻止其有害影響的方法。不幸的是,一些惡意軟體編寫者使用自修改程式碼技術(多型偽裝、異或加密、混淆)[1],顯然是為了讓即使檢測惡意軟體也很困難,更不用說反彙編了。
反彙編程式碼有很多實際應用。它的一個積極的副作用是,讀者將更好地理解機器碼、組合語言和高階語言之間的關係。對這些主題的良好了解將幫助程式設計師生成更高效、更安全的程式碼。