反编译、重新实现与重编译有什么区别

作者: DecompHub · 更新日期 · 简体中文

按照想获得的结果选择项目。重建源码、兼容替代品和原生执行程序都可能有价值,但回答的是不同问题。同一游戏名称并不会让它们的进度指标可以互换。

匹配反编译

目标是让重建源码编译成与指定原始构建相同的机器码。编译器版本、参数和目标修订版都重要。decomp.me FAQ解释了函数级比较。成功的 scratch 只证明那次比较的结果,不是整个程序的完成分数。

若想研究原程序结构或贡献匹配代码,可以选择这条路线。先确认报告统计字节、函数、选定模块还是其他范围。

重新实现与兼容性

重新实现复现行为或接口,不要求相同可执行文件。更适合用功能和测试评价。例如 ScummVM替换受支持游戏的执行程序,同时使用游戏数据。兼容性需要按目标和版本确认。

需要实用替代品或改进支持系统上的行为时,这类项目更合适。不要把兼容性声明换算成二进制匹配率。

静态重编译

静态重编译在运行前,将已有程序的指令转换到另一环境。N64Recomp描述了 N64 代码与原生程序的工作流;完整的具体游戏移植还需要围绕转换代码进行整合。

它可能在手工源码重建完成前实现原生运行,但不会自动解释原始源码设计。通用工具也不保证任何游戏无需额外工作就能运行,仍要阅读目标项目的要求。

反汇编与移植

反汇编把机器指令表示为汇编,不必恢复高层 C 或 C++ 源码,也能支持分析。移植是让程序适应另一平台,可以建立在反编译、重新实现或重编译之上。标签可能重叠,因为它们描述不同阶段。

以目录中的工作类型为起点,再核实上游目标。进度指南说明如何在保留这些差异的前提下比较测量。