你能反编译一个为windows构建的C++程序,然后在不同的体系结构中再次编译到linux上吗?[已关闭]

ev7lccsx  于 2023-08-03  发布在  Linux
关注(0)|答案(1)|浏览(102)

已关闭。此问题为opinion-based。它目前不接受回答。
**希望改进此问题?**请更新问题,以便editing this post能够以事实和引文来回答。

2天前关闭。
Improve this question
我知道反编译二进制文件是可能的,即使结果很难理解,我也不想改变生成的源代码。我想要的只是获取反编译过程的结果,然后针对不同的架构再次编译。例如,使用为windows制作的VST3 DLL,然后为linux生成一个包。
这是可行的,还是反编译的结果不能用于再次编译?我知道在功能上它应该是相同的程序,但我不知道是否太具体的架构,它是建立。
如果这是可行的,它是否可以以自动化的方式实现?有一个脚本自动使用反编译器,然后Cmake或类似的东西输出反编译后的目标二进制文件。
我从this reference知道C++ DLL只能反编译为汇编,但我想知道是否可以重新编译为另一种体系结构。

8ulbf1ek

8ulbf1ek1#

通常,C++代码由编译器前端转换为编译器中间表示(IR)。编译器IR通常用于一种以上的语言,例如LLVM IR,因此支持一种新的语言只需要实现一个新的前端来将源代码转换为IR。
编译器IR然后被转换和优化,并且通过进一步的转换和优化被转换成目标架构汇编语言,其然后被编译成机器代码。所有这些转变都是不可逆的。程序集中的调试信息将机器代码位置Map回源文件/行位置,但如果没有源代码,则调试信息毫无价值。
机器代码可以反编译回汇编源代码(没有有意义的符号标识符),但不能再进一步。
模拟器通常用于运行为不同平台编译的可执行文件,例如M1 Mac运行Intel x86可执行文件。

相关问题