热榜
#开发工具

ran-j/PS2Recomp

把 PS2 游戏的 ELF 直接静态翻译成 C++,让移植者拿到可读可改的源码,而不是套一层模拟器。

3,682
218
C++
GPL-3.0
上线 1 年

解决什么问题

把一款 PS2 游戏搬到 PC,通常只有两条路:要么打包一个模拟器,从此所有修复都落在别人的模拟器里;要么手工反编译到天荒地老,代码还跑不起来。PS2Recomp 提供第三条路:读取 PS2 的 ELF,把 MIPS R5900 指令静态翻译成 C++,再配一个运行时来执行生成的代码,最终交付的是一份你能读、能改、能扩展的源码工程。

有什么不同

PCSX2 这类模拟器在运行时解释或 JIT 客户机代码,背后是一整套完整的硬件模型;PS2Recomp 则是一条 MIPS 指令生成一条 C++ 语句,极其直白,因此慢但透明。与它自称灵感来源的 N64Recomp 相比,差异主要在覆盖面:它额外带了 R3000A IOP 模块执行、syscall 分发,以及按游戏构建绑定的 override 钩子。真正让它可用的是配置驱动的 stubs、skip 和地址绑定模型:面对去符号的零售版 ELF,可以先用 ret0/ret1 这类通用处理器把未知调用分流,再逐步替换成真实实现。

适合谁

适合熟悉 Ghidra 和 C++、并且手里确实持有原版游戏的逆向工程师和移植团队。README 推荐的工作流就是从 Ghidra 开始,用附带脚本导出函数表,再用导出的 TOML 重新编译。它不适合只想跑光盘镜像的玩家,也不适合期待一键转换的人:项目自己列出的限制里写着 VU 和 GS 性能非常差,大量硬件路径仍是 stub。

上手成本

需要 CMake 3.20+、C++20 编译器(README 说明主要在 MSVC 上测试)、SSE4/AVX 宿主支持,并且要带 submodule 递归克隆。每移植一款游戏,你就多了一个需要自己构建和维护的 C++ 工程,而且 game override 里的补丁与具体 ELF 构建和地址绑定,换版本就失效。许可证是 GPL-3.0,如果你打算闭源分发移植版,这是实打实的约束。README 自己也明确说这是实验性项目,运行时只是继续往下做的基础,不是成品。

点评

项目大约 18 个月,没上过 GitHub 每日 Trending,却在 C++ 月榜里单月涨了约 400 star,更像一次关注度脉冲,而非早已站稳的工具。文档对自身的短板写得很坦诚,这对维护者信誉是加分,对指望开箱即用流水线的人是减分。只有你本来就在做 PS2 逆向、并且希望产出物是 C++ 代码库时,它才值得投入时间;其他人建议先观望,等 GS/VU 这一块补上来再说。

本文由 AI 根据项目 README 生成,更新于 2026年10月24日,以项目官方文档为准。