是否有任何ARM指令可用於i386指令轉換器?將ARM指令轉換爲i386指令
回答
您可以使用QEMU來仿真x86上的ARM指令。
它處於測試階段非常多,但這個想法是寫一個二進制文件LLVM前端,這樣LLVM後端就可以生成任何支持平臺的代碼。目前正在積極開發ARMv6前端,我相信他們希望能夠得到它的幫助。目標是支持任何支持的體系結構之間的仿真和靜態重新編譯。
您可以將ARM代碼反向工程爲C,然後編譯C代碼。 This company實際上從彙編程序中生成了非常好的代碼C代碼。 (我從來沒有使用他們的產品,但我熟悉該公司背後的研究)。
仿真或靜態二進制翻譯是我會採取的路徑,每個都有其優點和缺點。
你需要更清楚你的問題。將一個指令集簡單地翻譯成另一個指令集是一回事,讓結果變得有用的難點在於你正在處理的是什麼。你的ARM的內存和寄存器空間與X86不匹配,所以對指令(模擬或者sbt)的直接指令是不夠的,你必須添加代碼來替換許多加載和存儲的東西來檢查地址,確定什麼它正在處理和模擬外設(仿真或者sbt)。
最簡單的方法是使用稱爲「軟件動態轉換」的東西。您在這裏可以找到該技術的一些信息:
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.120.5182&rep=rep1&type=pdf
它通過動態翻譯「基本塊」,在那裏你把所有的指令到一個控制點(分支,調用,跳躍),然後更換代碼分支目標與回調到翻譯器的存根。它大致相當於CLR中的「JIT編譯」之類的東西,除了它在更細粒度級別(基本塊而不是方法)之外。它比靜態翻譯方法更有優勢,因爲它不依賴於準確的反彙編。獲得完美的拆卸是不可能的(這相當於暫停問題)。即使真正優秀的反彙編程序,像IDA專業版一樣,在識別諸如異常處理程序之類的東西時也會遇到問題,並經常會將代碼與數據混淆。
但是,軟件動態轉換不受任何這些限制的約束。它甚至可以(理論上)使用適當的內存保護技術處理自修改代碼。
microsoft提供了設備模擬器,它完全如此。 第一個版本甚至附帶源代碼:http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=10865
- 1. 將i386操作碼解碼爲指令
- 2. ARM彙編指令
- 3. arm指令是'UNDEFINED'?
- 4. 將JQuery插件轉換爲AngularJS指令?
- 5. 將Jquery轉換爲角度指令
- 6. 將jQuery插件轉換爲AngularJS指令
- 7. 拇指指令與arm指令集相比如何增加?
- 8. ARM,幫助LDR指令
- 9. ARM彙編「retne」指令
- 10. 困惑的ARM指令
- 11. ARM 32位指令STR
- 12. ARM彙編 - 分支指令
- 13. 混合ARM和THUMB指令
- 14. ARM SUB指令操作數
- 15. AngularJS:將子指令轉化爲父指令
- 16. 將涉及CPU寄存器的指令轉換爲存儲器指令
- 17. 將非常簡單的ARM指令轉換爲二進制/十六進制
- 18. AngularJS到角指令轉換
- 19. 通過指令轉換爲貨幣
- 20. MIPS指令轉換爲16進制
- 21. 將jQuery插件轉變爲指令
- 22. 將指令序列轉化爲圖表
- 23. 爲什麼分支指令比跳轉指令更快?
- 24. 如何將此代碼更改爲ARM彙編指令?
- 25. ARM中的指令調度NEON
- 26. ARM BLX指令範圍(絕對值)
- 27. 什麼是ARM Thumb指令集?
- 28. ARM是更安全的指令集嗎?
- 29. 解散簡單的ARM指令?
- 30. ARM彙編指令的含義
你想達到什麼目的? – 2010-05-28 10:04:21
你是否試圖運行一些你已經得到的代碼(在這種情況下,一個模擬器是好的)還是你想轉換一些你從前開發者繼承的代碼,以及你沒有源代碼的地方? – 2010-06-03 07:59:13
雖然從定製編譯器(ARM到IR到x86)在技術上可以將指令從ARM指令轉換爲x86指令,但還有其他更主要的障礙,例如應用程序設計的完全不同的操作系統和運行時庫與指令轉換無關。重新編譯x86和目標操作系統的應用程序會更容易。 – tgiphil 2010-06-03 08:08:12