Compiler construction 对象文件是否包含x86代码?如何从对象文件生成RISC-V代码?

Compiler construction 对象文件是否包含x86代码?如何从对象文件生成RISC-V代码?,compiler-construction,object-files,riscv,Compiler Construction,Object Files,Riscv,我们有编译代码后生成的对象文件(不是用C/C++编写的)。是否可以从该对象文件生成等效的RISC-V代码?如果是,怎么做 是一件事,但不是小事。与其他编译器基础设施相比,它是一个相对利基的东西。此外,您似乎需要静态转换(即为目标平台生成一个完整的二进制文件,而在运行时不做其他事情)。静态翻译器要么速度可以接受,而且不支持自修改代码(可能还有其他高级功能),要么通过实现一个功能齐全、速度非常慢的仿真器来支持所有这些功能 在任何情况下,实现一个都非常复杂,特别是对于像x86这样复杂的体系结构。除非您

我们有编译代码后生成的对象文件(不是用C/C++编写的)。是否可以从该对象文件生成等效的RISC-V代码?如果是,怎么做

是一件事,但不是小事。与其他编译器基础设施相比,它是一个相对利基的东西。此外,您似乎需要静态转换(即为目标平台生成一个完整的二进制文件,而在运行时不做其他事情)。静态翻译器要么速度可以接受,而且不支持自修改代码(可能还有其他高级功能),要么通过实现一个功能齐全、速度非常慢的仿真器来支持所有这些功能

在任何情况下,实现一个都非常复杂,特别是对于像x86这样复杂的体系结构。除非您已经找到一个从x86到RISC-V的通用二进制转换器,否则您最好将程序移植到一种可以为RISC-V编译的形式(比如,一种具有更广泛编译器支持的更主流的语言)。因为您似乎可以访问源代码,所以这应该是可行的,并且可能会提高未来的可维护性。但首先,仔细检查是否能找到当前使用的针对RISC-V的语言的编译器。

是一件事,但不是小事。与其他编译器基础设施相比,它是一个相对利基的东西。此外,您似乎需要静态转换(即为目标平台生成一个完整的二进制文件,而在运行时不做其他事情)。静态翻译器要么速度可以接受,而且不支持自修改代码(可能还有其他高级功能),要么通过实现一个功能齐全、速度非常慢的仿真器来支持所有这些功能

在任何情况下,实现一个都非常复杂,特别是对于像x86这样复杂的体系结构。除非您已经找到一个从x86到RISC-V的通用二进制转换器,否则您最好将程序移植到一种可以为RISC-V编译的形式(比如,一种具有更广泛编译器支持的更主流的语言)。因为您似乎可以访问源代码,所以这应该是可行的,并且可能会提高未来的可维护性。但首先,仔细检查是否能找到当前使用的针对RISC-V的语言的编译器。

是一件事,但不是小事。与其他编译器基础设施相比,它是一个相对利基的东西。此外,您似乎需要静态转换(即为目标平台生成一个完整的二进制文件,而在运行时不做其他事情)。静态翻译器要么速度可以接受,而且不支持自修改代码(可能还有其他高级功能),要么通过实现一个功能齐全、速度非常慢的仿真器来支持所有这些功能

在任何情况下,实现一个都非常复杂,特别是对于像x86这样复杂的体系结构。除非您已经找到一个从x86到RISC-V的通用二进制转换器,否则您最好将程序移植到一种可以为RISC-V编译的形式(比如,一种具有更广泛编译器支持的更主流的语言)。因为您似乎可以访问源代码,所以这应该是可行的,并且可能会提高未来的可维护性。但首先,仔细检查是否能找到当前使用的针对RISC-V的语言的编译器。

是一件事,但不是小事。与其他编译器基础设施相比,它是一个相对利基的东西。此外,您似乎需要静态转换(即为目标平台生成一个完整的二进制文件,而在运行时不做其他事情)。静态翻译器要么速度可以接受,而且不支持自修改代码(可能还有其他高级功能),要么通过实现一个功能齐全、速度非常慢的仿真器来支持所有这些功能


在任何情况下,实现一个都非常复杂,特别是对于像x86这样复杂的体系结构。除非您已经找到一个从x86到RISC-V的通用二进制转换器,否则您最好将程序移植到一种可以为RISC-V编译的形式(比如,一种具有更广泛编译器支持的更主流的语言)。因为您似乎可以访问源代码,所以这应该是可行的,并且可能会提高未来的可维护性。但首先,仔细检查是否可以找到当前使用的语言的编译器,该语言的目标是RISC-V。

什么目标文件?密码是什么?你是怎么编译的?什么对象文件?密码是什么?你是怎么编译的?什么对象文件?密码是什么?你是怎么编译的?什么对象文件?密码是什么?你是怎么编译的?显然有一个,所以你应该能够把LLVM作为一个中间目标。@rici用于二进制翻译?从技术上讲是的(虽然它不支持自修改代码),但准确地将所有x86操作码及其副作用翻译成LLVM IR仍然是一项艰巨的任务,只比直接翻译成RISC-V稍微好一点。我坚持认为,找到一个现有的成熟项目是让二进制翻译路线发挥作用的唯一现实的方法。我同意。我的意思是“只需将程序移植到一种可以为RISC-V编译的形式”就可以通过将程序移植到LLVM来实现;可能实际可用的东西(取决于程序是什么)以及其他优势。也许我应该更清楚一点。显然有一个这样的问题,所以你应该能够将LLVM作为中间目标。@rici用于二进制翻译?从技术上讲是的(虽然它不支持自修改代码),但准确地将所有x86操作码及其副作用翻译成LLVM IR仍然是一项艰巨的任务,只比直接翻译成RISC-V稍微好一点。我坚持认为,找到一个现有的成熟项目是获得二进制翻译路线的唯一现实的方法