[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$f3e8ee7vm24emk":3},{"code":4,"message":5,"data":6,"timestamp":31},10000,"success",{"full_name":7,"position":8,"description":9,"language":10,"stars":11,"forks":12,"stars_gained":13,"age_days":14,"hn_threads":15,"one_liner":16,"summary_md":17,"topic":18,"github_topics":21,"license":27,"homepage":28,"updated_at":29,"history":30},"ran-j\u002FPS2Recomp",6,"Playstation 2 Static Recompiler & Runtime Tool to make native PC ports","C++",3682,218,416,560,[],"把 PS2 游戏的 ELF 直接静态翻译成 C++，让移植者拿到可读可改的源码，而不是套一层模拟器。","## 解决什么问题\n把一款 PS2 游戏搬到 PC，通常只有两条路：要么打包一个模拟器，从此所有修复都落在别人的模拟器里；要么手工反编译到天荒地老，代码还跑不起来。PS2Recomp 提供第三条路：读取 PS2 的 ELF，把 MIPS R5900 指令静态翻译成 C++，再配一个运行时来执行生成的代码，最终交付的是一份你能读、能改、能扩展的源码工程。\n\n## 有什么不同\nPCSX2 这类模拟器在运行时解释或 JIT 客户机代码，背后是一整套完整的硬件模型；PS2Recomp 则是一条 MIPS 指令生成一条 C++ 语句，极其直白，因此慢但透明。与它自称灵感来源的 N64Recomp 相比，差异主要在覆盖面：它额外带了 R3000A IOP 模块执行、syscall 分发，以及按游戏构建绑定的 override 钩子。真正让它可用的是配置驱动的 `stubs`、`skip` 和地址绑定模型：面对去符号的零售版 ELF，可以先用 `ret0`\u002F`ret1` 这类通用处理器把未知调用分流，再逐步替换成真实实现。\n\n## 适合谁\n适合熟悉 Ghidra 和 C++、并且手里确实持有原版游戏的逆向工程师和移植团队。README 推荐的工作流就是从 Ghidra 开始，用附带脚本导出函数表，再用导出的 TOML 重新编译。它不适合只想跑光盘镜像的玩家，也不适合期待一键转换的人：项目自己列出的限制里写着 VU 和 GS 性能非常差，大量硬件路径仍是 stub。\n\n## 上手成本\n需要 CMake 3.20+、C++20 编译器（README 说明主要在 MSVC 上测试）、SSE4\u002FAVX 宿主支持，并且要带 submodule 递归克隆。每移植一款游戏，你就多了一个需要自己构建和维护的 C++ 工程，而且 game override 里的补丁与具体 ELF 构建和地址绑定，换版本就失效。许可证是 GPL-3.0，如果你打算闭源分发移植版，这是实打实的约束。README 自己也明确说这是实验性项目，运行时只是继续往下做的基础，不是成品。\n\n## 点评\n项目大约 18 个月，没上过 GitHub 每日 Trending，却在 C++ 月榜里单月涨了约 400 star，更像一次关注度脉冲，而非早已站稳的工具。文档对自身的短板写得很坦诚，这对维护者信誉是加分，对指望开箱即用流水线的人是减分。只有你本来就在做 PS2 逆向、并且希望产出物是 C++ 代码库时，它才值得投入时间；其他人建议先观望，等 GS\u002FVU 这一块补上来再说。",{"slug":19,"name":20},"developer-tools","开发工具",[22,23,24,25,26],"ps2","recompile","reverse-engineering","static-recompilation","tool","GPL-3.0",null,"2026-10-24T22:05:47Z",[],1792898440]