开源推荐
morning
GitHub 热门项目:XenonRecomp
摘要
GitHub项目:XenonRecomp 仓库地址:https://github。com/hedge-dev/XenonRecomp Stars:6349 | 作者:hedge-dev 项目描述:A tool for recompiling Xbox 360 games to native executables。
the
instructions
for
code
The
2026-05-18
1 阅读
GitHub Trending
GitHub 项目:XenonRecomp
仓库地址:https://github.com/hedge-dev/XenonRecomp
星级:6349 | 作者:对冲开发
项目描述:用于将 Xbox 360 游戏重新编译为本机可执行文件的工具。
===================================================
自述文件内容:
# XenonRecomp
XenonRecomp 是一款将 Xbox 360 可执行文件转换为 C++ 代码的工具,然后可以为任何平台重新编译。
该项目很大程度上受到 [N64: Recompiled](https://github.com/N64Recomp/N64Recomp) 的启发,这是一个用于 N64 可执行文件的类似工具。
**免责声明:** 该项目不提供运行时实现。它仅将游戏代码转换为 C++,如果没有运行时支持,它就无法正常运行。 **让游戏正常运行是你的责任。**
## 实施细节
### 说明
这些指令是直接转换的,没有任何努力使它们类似于反编译的代码,这意味着输出不太容易被人类阅读。 CPU 状态作为参数传递给每个 PPC 函数,其中包括每个 PPC 寄存器的定义及其在执行时的当前值。第二个参数是基地址指针,因为 Xbox 360 CPU 使用 32 位指针。
大量 PPC 指令已实现,其中缺失的指令主要是已实现指令的变体。某些指令(例如 D3D 解包/打包指令)不支持所有操作数类型。当遇到缺失情况时,会生成警告,或者在转换后的 C++ 代码中插入调试中断。
指令实现对小端值进行操作。但是,由于 Xbox 360 是大端机器,因此内存加载指令在读取值时交换字节顺序,而内存存储指令在写入之前将其反转为大端字节序。所有内存加载和存储都被标记为易失性,以防止 Clang 进行不安全的代码重新排序。
向量寄存器的字节顺序处理更为复杂。重新编译器选择反转整个 16 字节向量,而不是交换各个 32 位元素。指令必须考虑到这种相反的顺序,例如在点积中使用 WZY 分量而不是 XYZ,或者需要向量包指令的相反参数。
FPU 希望非规范化数字保持不变,而 VMX 指令始终刷新它们。这是通过在 CPU 状态结构中存储当前浮点状态并在执行每条指令之前根据需要启用或禁用非正常刷新来管理的。
大多数 VMX 指令都是使用 x86 内在函数实现的。对 ARM64 的支持是使用 [SIMD Everywhere](https://github.com/simd-everywhere/simde) 实现的。
### MMIO
MMIO 通常用于 XMA 解码等硬件操作,目前尚未实现。实现 MMIO 的尝试尚未完成,但支持它可能并非易事,可能需要对指令进行高级分析。
### 间接函数
虚拟函数调用通过在运行时创建“完美哈希表”来解决,其中取消引用 64 位指针(使用原始指令地址乘以 2)给出重新编译函数的地址。之前这是通过创建 8 GB 虚拟分配来实现的