回答
我懷疑是否會有通用的解決方案(考慮間接分支等),LLVM IR比任何彙編器都要「高級」。雖然有可能在每個BB的基礎上進行翻譯。您可能想要檢查llvm-qemu和libcpu項目等。
LLVM能夠捕獲高級信息,恕我直言,它不是必需的。我相信可以有解決方案 - 也許不是一種普遍的方法,但仍然存在。感謝您的參考:llvm-qemu和libcpu看起來很有趣。 :) –
順便說一句。如果[有可能LLVM到Javascript trsnalation,它實際上實現](http://stackoverflow.com/questions/7295922/what-platform-can-i-compile-binaries-for-using-llvm-low-level-virtual -machine/7325817#7325817),另一個組件也是可能的;)。問題,你什麼時候會這樣做:)。 –
考慮使用RevGen工具在S2E project內開發。它允許將x86二進制文件轉換爲LLVM IR。源代碼可以通過url https://dslabgit.epfl.ch/git/s2e/s2e.git從GIT存儲庫的Revgen分支檢出。
我看到你已經[這裏提到](http://stackoverflow.com/a/9059978/544721)另一個[論文](http://infoscience.epfl.ch/record/149975/files/x86-llvm- translator-chipounov_2.pdf)與x86 - > LLVM翻譯相關。感謝您的參考。 –
我有提供的鏈接問題。 'git clone https:// dslabgit.epfl.ch/git/s2e/s2e.git'不能克隆:/。 –
我在Ubuntu 10.10上沒有任何問題。確保你已經安裝了git並且正確的防火牆/代理設置。您也可以在項目的網站上找到一些相關文檔_https://s2e.epfl.ch/embedded/s2e/index.html_ – bsa2000
上平移臂二進制LLVM IR只是張貼一些參考:
繳械 - 手臂二進制LLVM IR反彙編
https://code.google.com/p/disarm/
不過,我還沒有嘗試過,所以不知道它的質量和穩定性。其他人可能會發布有關此項目的其他信息?
提供的鏈接不起作用 –
看來作者已經撤消了它......幸運的是,我有一個本地svn來備份它的代碼。 – HackNone
對於@ bsa2000提到的RevGen工具,這篇最新論文"A compiler level intermediate representation based binary analysis and rewriting system"指出了S2E和Revinc中的一些限制。
我把它們拉出來。
缺點動態翻譯的:
S2E [16]和Revnic [14]提出了使用動態QEMU轉換 86到LLVM的方法。與我們的方法不同,這些方法將 代碼塊轉換爲LLVM,從而將LLVM 分析的應用程序一次僅限制到一個塊。
IR不全:
Revnic [14]和RevGen [15]通過合併所述翻譯 塊恢復的IR,但所回收的IR是不完整的,只適用於 當前執行;因此,各種全程序分析將提供不完整的信息。
沒有抽象棧或促進信息
另外,翻譯的代碼保留了原始 雙進制有關堆棧佈局的所有的假設。他們不提供任何 方法來獲得抽象堆棧或將存儲器位置 升級爲符號,這些符號對於應用幾個源級分析是必不可少的。
有新的項目,在一些早期的階段是,該libbeauty
: https://github.com/jcdutton/libbeauty
文章關於項目:Libbeauty:另一種逆向工程工具,2013年12月24日,邁克爾·拉拉貝爾 - http://www.phoronix.com/scan.php?page=news_item&px=MTU1MTU
它現在只支持x86_64
的子集作爲輸入。其中一個項目目標是能夠將生成的LLVM IR編譯回程序集以獲得具有相同功能的二進制程序。
項目看起來不錯!謝謝! –
mcsema是一種生產品質的二進制提升器。它需要x86和x86-64,並靜態「提升」到LLVM IR。它被積極維護,獲得BSD許可,並且有廣泛的測試和文檔。
- 1. 將GCC IR轉換爲LLVM IR
- 2. 如何將llvm IR轉換爲c代碼?
- 3. 將LLVM IR轉換爲其他語言代碼
- 4. 將G-Machine源代碼轉換爲LLVM IR
- 5. 將llvm位代碼庫轉換爲本地代碼庫
- 6. NVVM在LLVM中將代碼操作碼轉換爲十六進制代碼
- 7. 是否可以將LLVM字節碼轉換爲Java字節碼?
- 8. 將組件轉換爲機器代碼
- 9. LLVM將常量轉換爲值
- 10. 將LLVM框架端口轉換爲Java?
- 11. 如何將'llvm :: BasicBlock'轉換爲'pred_iterator'?
- 12. 不斷轉換中雙擊LLVM IR
- 13. 將VB6代碼轉換爲PHP轉換
- 14. 將xml轉換爲代碼
- 15. 將代碼轉換爲POST
- 16. 將代碼轉換爲RequireJS
- 17. 將ASTNode轉換爲代碼
- 18. 將代碼轉換爲lambda
- 19. 將UML轉換爲代碼
- 20. 將代碼轉換爲constexpr
- 21. 將代碼轉換爲python
- 22. 將.NET應用程序轉換爲x86本機代碼
- 23. 將迭代器代碼轉換爲流
- 24. 如何將字節碼轉換爲機器本機代碼
- 25. 將Java代碼轉換爲C#代碼
- 26. 將Android代碼轉換爲MonoAndroid代碼
- 27. 將PHP代碼轉換爲C#代碼
- 28. 將JavaScript代碼轉換爲C代碼
- 29. 將Informatica代碼轉換爲SQL代碼
- 30. 將atmega32代碼轉換爲atmega16代碼
我檢查了LLVM-objdump的,但據我瞭解,它產生x86_64的/ x86彙編 - 我要的是LLVM彙編。 –
x86_86,x86,arm有很多反彙編程序。也許一些目標爲「LLVM IR」的彙編編譯器? –
這不是反彙編,那是翻譯! –