關於構建編譯器的理論和技術必須有一百萬本書籍和論文。有沒有相反的資源?我對任何特定的硬件平臺不感興趣。尋找好的書籍/研究論文,深入研究這個問題和困難。反編譯資源與理論
反編譯資源與理論
回答
反編譯實際上是一個誤用。反編譯器將對象代碼編譯爲源代表。在許多方面,它們比傳統編譯器更易於編寫 - 「源代碼」已經過語法檢查,通常格式非常精確。
他們建立(地址),符號表和構造應用程序的目標語言表示。通常的困難是,原始編譯器必須通過刪除常見的子表達式,將循環中的常量代碼和許多其他類似的技術進行優化,從而對原始應用程序進行或多或少的優化。這些通常不可能用目標語言來表示。
在源爲良好限定的VM的情況下,則往往這種優化是留給JIT編譯器將得到的反編譯的代碼是非常可讀的 - 在許多情況下幾乎相同的原件。這種類型的編譯器通常會在目標代碼中留下部分或全部符號,以便恢復這些符號。其他包括行號以幫助調試和故障排除。這些都有助於恢復原始代碼。
作爲一個計數器,有一些代碼混淆器故意對代碼進行轉換,以防止通過加擾名稱簡單恢復原始源代碼,更改序列代碼生成(不改變其結果含義)並引入其中的構造沒有相同的源語言。
我上AS3和Java反編譯工作,我可以向你保證,一切我已經在關於反編譯學到的是直接從編譯原理。中間表示,數據流分析,術語重寫和其他相關概念都可以在龍書中找到。
雖然有一點是相同的有一點是不同的。例如龍書並沒有多少提到Earley算法,事實上似乎不建議使用它。但反編譯本質上是不明確的,所以你確實需要一個完整的上下文無關的解析器。再次,我的經驗在http://rocky.github.io/Deparsing-Paper.pdf – rocky 2018-02-15 17:58:43
我已經寫反編譯爲動態語言here。
注意,雖然這是一個自定義(高級別)的虛擬機的動態語言。
- 1. 用於x86反編譯的資源
- 2. 編譯失敗的嘗試,與資源
- 3. Pebble SDK編譯錯誤,與資源的
- 4. 使用CSharpCodeDomProvider與資源文件編譯
- 5. 反編譯預編譯源代碼ASP.NET
- 6. 編譯器設計資源
- 7. 無法編譯資源
- 8. 將源代碼管理用於其資源的C++編譯器
- 9. 從編譯源提取資源
- 10. 分層組權限理論/資源?
- 11. 學習範疇理論的資源
- 12. 反編譯框架,res.apk多個資源異常
- 13. intellij想法maven dependencies使用反編譯器的資源代碼
- 14. 替換SWF資源而無需反編譯?
- 15. 如何理解我的vb反編譯器已經反編譯
- 16. apptool反編譯與APKTOOLT
- 17. Xcode編譯源文件並將未編譯的源文件複製到資源
- 18. 翻譯資源
- 19. 資源與資源
- 20. 理解反編譯彙編代碼
- 21. 理解反編譯彙編代碼
- 22. 混淆了Intellij如何編譯事物並處理資源
- 23. x64 .NET編譯/進程資源管理器奇怪
- 24. 使用字體資源編譯
- 25. 在clojure項目中編譯資源
- 26. Rails資源預編譯神祕錯誤
- 27. 使用資源修改自動編譯
- 28. 有條件的資源編譯
- 29. 通過python編譯PySide資源
- 30. Android SDK資源轉換/編譯問題
http://www.program-transformation.org/Transform/DeCompilation – 2011-04-27 19:17:18