2011-04-27 31 views
4

關於構建編譯器的理論和技術必須有一百萬本書籍和論文。有沒有相反的資源?我對任何特定的硬件平臺不感興趣。尋找好的書籍/研究論文,深入研究這個問題和困難。反編譯資源與理論

+0

http://www.program-transformation.org/Transform/DeCompilation – 2011-04-27 19:17:18

回答

1

反編譯實際上是一個誤用。反編譯器將對象代碼編譯爲源代表。在許多方面,它們比傳統編譯器更易於編寫 - 「源代碼」已經過語法檢查,通常格式非常精確。

他們建立(地址),符號表和構造應用程序的目標語言表示。通常的困難是,原始編譯器必須通過刪除常見的子表達式,將循環中的常量代碼和許多其他類似的技術進行優化,從而對原始應用程序進行或多或少的優化。這些通常不可能用目標語言來表示。

在源爲良好限定的VM的情況下,則往往這種優化是留給JIT編譯器將得到的反編譯的代碼是非常可讀的 - 在許多情況下幾乎相同的原件。這種類型的編譯器通常會在目標代碼中留下部分或全部符號,以便恢復這些符號。其他包括行號以幫助調試和故障排除。這些都有助於恢復原始代碼。

作爲一個計數器,有一些代碼混淆器故意對代碼進行轉換,以防止通過加擾名稱簡單恢復原始源代碼,更改序列代碼生成(不改變其結果含義)並引入其中的構造沒有相同的源語言。

2

我上AS3和Java反編譯工作,我可以向你保證,一切我已經在關於反編譯學到的是直接從編譯原理。中間表示,數據流分析,術語重寫和其他相關概念都可以在龍書中找到。

+0

雖然有一點是相同的有一點是不同的。例如龍書並沒有多少提到Earley算法,事實上似乎不建議使用它。但反編譯本質上是不明確的,所以你確實需要一個完整的上下文無關的解析器。再次,我的經驗在http://rocky.github.io/Deparsing-Paper.pdf – rocky 2018-02-15 17:58:43

0

我已經寫反編譯爲動態語言here

注意,雖然這是一個自定義(高級別)的虛擬機的動態語言。