您可以反编译为 Windows 构建的 C++ 程序,然后在不同的架构中将其再次编译到 Linux 吗?

问题描述 投票:0回答:1

我知道可以反编译二进制文件,尽管结果很难理解,但我根本不想更改生成的源。我想要的只是获取反编译过程的结果,然后再次编译,但针对不同的体系结构。例如,为 Windows 制作VST3 DLL,然后为 Linux 生成一个包。

这样可行吗,还是反编译的结果无法再次编译?我知道从功能上来说它应该是相同的程序,但我不知道对于它所构建的架构来说是否过于具体。

如果这是可行的,是否可以以自动化的方式实现?有一个脚本自动使用反编译器,然后 Cmake 或类似的东西在反编译后输出目标二进制文件。

我从这个参考文献知道C++ DLL只能反编译为程序集,但我想知道是否可以将其重新编译为另一个体系结构。

c++ linux compilation cross-compiling decompiling
1个回答
0
投票

通常,C++ 代码由编译器前端转换为编译器中间表示(IR)。编译器 IR 通常用于多种语言,例如LLVM IR,因此支持新语言只需要实现一个新的前端即可将源代码转换为 IR。

编译器IR经过转换和优化,转换为目标架构汇编语言,进一步转换和优化,然后编译成机器代码。所有这些转变都是不可逆的。程序集中的调试信息将机器代码位置映射回源文件/行位置,但如果没有源代码,则毫无价值。

机器代码可以反编译回汇编源代码(没有有意义的符号标识符),但不能再反编译了。


模拟器通常用于运行为不同平台编译的可执行文件,例如 M1 Mac 运行 Intel x86 可执行文件。

© www.soinside.com 2019 - 2024. All rights reserved.