使用 ReXGlue 将 Xbox 360 游戏移植到原生 C++
模拟 Xbox 360 这样的主机一直以来都受制于高 CPU 需求。八线程的 PowerPC Xenon 处理器需要相当强力的硬件才能实时翻译指令。Xenia 项目开发者做了大量工作,但即使在现代 PC 上,CPU 负载仍然相当明显。
逆向工程社区正在采用一种不同的方案:静态重编译。一种工具不再在游戏过程中实时翻译代码,而是将主机可执行文件一次性转换为标准 C++ 源代码,然后为目标平台进行原生编译。
这正是 ReXGlue 项目所做的事情。
静态重编译的原理
当模拟器实时运行时,它需要持续消耗资源来解码 PowerPC 指令、管理寄存器并模拟主机架构。静态重编译器则提前处理二进制文件,分析其中的指令,并生成等效的 C++ 代码。
然后由标准编译器(如 Clang 或 MSVC)接手,对生成的代码进行针对特定处理器的优化,并利用所有可用的 x86-64 或 ARM64 指令。最终得到的是一个标准的原生应用程序。
这种方案完全消除了转换开销。游戏直接调用 PC 的性能,资源需求大大降低。
ReXGlue 的组成
项目创建者明确表示,他们借鉴了 Xenia 团队的研究成果以及 XenonRecomp 和 rexdex 工具开发者的相关工作。
ReXGlue 的架构可以分为两个部分:
- 一个分析工具,用于读取 Xbox 360 二进制文件并生成 C++ 函数。
- 一个运行时库(SDK),用于处理主机系统函数调用、内存管理以及输入/输出操作。
仓库 rexglue-sdk 包含运行时和构建包装器。源代码本身使用 C 和 C++ 编写。
该项目支持 Windows(amd64)和 Linux(amd64、arm64)的构建。ARM64 构建尤其值得关注——它使得重编译后的游戏能够在掌机和单板计算机上运行而不会出现帧率损失。
当前状态与局限性
开发者坦言该项目仍处于早期阶段。公共 API 频繁变动,部分功能尚未完成。目前还无法通过一键操作将已编译的游戏转换为可直接运行的二进制文件。
静态重编译本身充满了复杂性。二进制文件中常包含间接跳转或压缩数据。自动化翻译器并不总是能够独立确定函数边界,需要一定的提示。因此,移植过程需要为每个游戏创建特定的配置文件。
该仓库目前约有 750 颗星。社区正在 Discord 服务器和 GitHub 的 releases 区域形成,作者会在那里发布每日构建版本。
适用人群
目前你无法通过这个工具在几分钟内运行任何 Xbox 360 游戏。但该项目肯定会吸引以下人群:
- 研究 PowerPC 可执行文件结构的逆向工程师和研究人员。
- 寻找从一种 ISA 到另一种 ISA 代码生成实践案例的编译器和翻译器开发者。
详细的 CLI 和配置文件使用说明可以在仓库的 wiki 中找到,源代码可在 GitHub 上的 rexglue/rexglue-sdk 仓库中获取。
相关项目