我們有編譯代碼後生成的對象文件(不是用C/C++編寫的)。是否有可能從這個目標文件生成等效的RISC-V代碼?如果是這樣,怎麼樣?對象文件是否包含x86代碼?我們如何從一個目標文件生成RISC-V代碼?
回答
Binary translation是一件事情,但並非微不足道。與其他編譯器基礎結構相比,這是一個相對小衆的事情。此外,您似乎需要靜態轉換(即爲目標平臺生成完整的二進制文件,並在運行時不再執行任何操作)。靜態轉換器要麼具有可以接受的減速並且不支持自修改代碼(可能還有其他高級功能),要麼通過實現全功能,非常慢的仿真器來支持所有這些。
在任何情況下,實現一個都是非常重要的,特別是對於像x86這樣複雜的體系結構。除非你發現一個已經可以工作的從x86到RISC-V的通用二進制翻譯器,否則只需將該程序移植到可以爲RISC-V編譯的形式(比如更廣泛的編譯器支持的主流語言)就可以了。由於您似乎有權訪問源代碼,因此這應該是可行的,並且可能還會提高未來的可維護性。但首先,雙擊和三重檢查您是否可以找到當前使用的語言編譯器確實是目標RISC-V。
顯然有一個[LLVM後端](https://github.com/riscv/riscv-llvm/blob/RISCV/README.md),所以你應該能夠將LLVM作爲一個inrermediate目標。 – rici
@rici對於二進制翻譯?技術上來說(儘管它不支持自修改代碼),但是準確地將所有x86操作碼及其副作用轉換爲LLVM IR仍然是一項艱鉅的任務,只比直接轉換爲RISC-V稍微好一點。我認爲,發現現有的成熟項目是使二進制翻譯路線發揮作用的唯一現實途徑。 – delnan
我同意。我建議「僅將程序移植到可爲RISC-V編譯的形式」可以通過移植程序來發布LLVM;可能實際上可用的東西(取決於程序是什麼)以及哪些具有其他優點。也許我應該更清楚。 – rici
- 1. 我如何影響另一個包含代碼的文件?
- 2. 如何從.dll文件生成.php文件以完成代碼?
- 3. 從csv文件生成html代碼
- 4. 從MATLAB源代碼生成文件
- 5. 從java源文件代碼生成
- 6. 從HTML代碼生成PDF文件
- 7. 如何將文件從一個代碼項目複製到另一個代碼
- 8. 包含一個包含代碼的頭文件:: blocks
- 9. 我如何更改AdSense代碼TWebbrowser對象文件完成後
- 10. 如何在代碼塊中包含另一個c文件
- 11. 有關包含文件和代碼生成的XSD.exe問題
- 12. 我們如何使用nodejs爲json對象生成qr代碼?
- 13. netbeans安裝文件(bash文件)如何包含Java代碼?
- 14. 從一個代碼創建幾個項目在一個生成文件中
- 15. XTEND代碼生成文件輸出(訂貨文件放入包)
- 16. 代碼分析生成的代碼生成文件 - 如何抑制警告?
- 17. 如何強制SilverLight在生成的代碼文件夾中生成代碼?
- 18. 如何包含一個包含coldfusion代碼的外部JavaScript文件?
- 19. 在aspx處包含C#文件代碼
- 20. 在JS代碼中包含JS文件
- 21. 有沒有辦法從一個.java文件生成Scala代碼
- 22. 從包含PHP代碼的外部文件導入HTML標記
- 23. 在asp.net中的另一個.cs文件中包含代碼背後的代碼
- 24. emacs打開包含在代碼文件中的多個目錄
- 25. 我應該如何爲我的AngularJS項目包含代碼文件?
- 26. 是否有可能在同一個文件中包含Swift和Objective-C代碼?
- 27. 從.aspx文件自動生成代碼隱藏文件
- 28. 將C代碼文件合併爲一個C代碼文件
- 29. Xcode是否爲Swift文件生成彙編代碼?
- 30. 代碼文件外代碼文件
什麼目標文件?代碼是什麼?你是如何編譯它的? – Chris