☰
跑 PS5 程序不靠模拟器:AnyPS5 如何把主机可执行文件搬进你的 PC
2026/10/13 2:32:57 网站建设 项目流程

跑 PS5 程序不靠模拟器:AnyPS5 如何把主机可执行文件搬进你的 PC

【免费下载链接】AnyPS5Tool for automatic PS5 executables porting to Linux and Windows项目地址: https://gitcode.com/GitHub_Trending/an/AnyPS5

你手上有从 PS5 上提取出的input.elf,想让它直接在你的 Linux 或 Windows 机器上跑起来。常规思路是搞一台模拟器,但 AnyPS5 走了另一条路:它叫 relinker,把这份可执行文件重链成宿主系统的原生格式,再让程序动态链接到项目自己实现的一组 PS5 系统库(prx),全程没有模拟层,也不需要额外的运行时进程。

一分钟看懂它

一句话定义:AnyPS5 是一个把 PS5 可执行文件移植成 Linux / Windows 原生程序的自动化工具,核心动作是"重链接"而不是"模拟"。

它不是模拟器——模拟器搭一台虚拟 PS5 替你跑游戏,而 AnyPS5 是把你的程序直接改造成本机程序。

对比维度传统模拟器AnyPS5
运行形态独立的模拟进程,游戏跑在虚拟硬件里转换产物就是普通本地进程,./app.elf直接执行
CPU 指令逐条解释或即时转译宿主原生指令,需要时只改 AMD 专属指令
系统调用在运行时里模拟系统 API链接到项目实现的 prx 系统库,由操作系统动态加载
图形路径模拟主机图形栈RDNA 着色器重编译为 SPIR-V,走 Vulkan 管线

原理拆解

打个比方:PS5 程序想调用系统功能时,并不是直接喊函数名,而是拿着一个叫 NID 的编号去找对应的库。AnyPS5 就是顺着这套编号规则给程序"改地址、换宿主"。

  • relinker(core/relinker):整个管线的总调度。它解析输入 ELF 的导入表,校验系统调用,重排成目标平台的动态节,产出 Linux ELF 或 Windows PE;--to-intel还能把 AMD 专属指令降级成 Intel 也能执行的版本。
  • prx 系统库(core/libs/prx):几十个 PS5 系统库的原生实现,从libkernel的线程与文件,到libScePad的输入设备。构建完成后由 nid_patcher(core/libs/nid)把每个导出函数改名为它的 NID,这样宿主的动态链接器就能按编号完成绑定——相当于把门牌换成 PS5 的牌号,程序找不到原来的库也能找到新门。
  • 着色器重编译器(core/shader/recompiler):RDNA 汇编到 SPIR-V 的完整编译链,从指令解码、控制流结构化、IR 翻译、优化到 SPIR-V 后端,输出经校验后可被 Vulkan 直接使用。它被刻意做成输入决定输出的纯函数模块,方便复用到别的项目。

三者的关系:relinker 负责"改程序",prx 库负责"补系统",重编译器负责"画画面",产物落地后就和你写的 C++ 程序没有任何区别。

第一次跑起来

先 clone 仓库并拉取子模块(SDL、FFmpeg、glslang 等都在这里):

git clone https://gitcode.com/GitHub_Trending/an/AnyPS5 cd AnyPS5 git submodule update --init --recursive

接着配置并完整构建。这一步跑完,你手里多了一个relinker可执行文件;FFmpeg 二进制会在配置阶段自动下载:

cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release cmake --build build --parallel cmake --build build --target libs --parallel

注意最后一条不是可省略的:构建文档 说明libs是自定义目标,默认构建并不会产出系统库,漏掉它你拿不到任何.prx。此时build/core/libs/libs/里应该躺着一堆.prx文件。

现在做转换。把干净 ELF 和随包模块按 USAGE.md 的布局放好:

source/ input.elf sce_module/ <随包 ELF 模块>

然后一条命令出结果,Linux 和 Windows 各来一份:

relinker source/input.elf app.elf relinker --windows source/input.elf app.exe

此时你多了一个本地可执行文件。把build/core/libs/libs/*.prx复制到它旁边的libs/,游戏资源放进app0/(转换后的随包模块会落在app0/sce_module/),最后chmod +x app.elf && ./app.elf就能看到游戏窗口。系统库默认从可执行文件旁边的libs/加载,因为--rpath默认值就是$ORIGIN/libs——路径是相对输出文件的,不是相对你当前所在目录。

如果你只想试试转换工具本身,还有轻装模式:-DANYPS5_RELINKER_ONLY=ON可以在不初始化子模块、不配 SDL/Vulkan/FFmpeg 的情况下单独构建 relinker 及其测试,Linux、Windows、macOS 都支持。

进阶玩法

两个高频场景值得单独说。

Intel 机器跑 AMD 指令。PS5 的 CPU 是 x86-64,但混有 AMD 专属指令。加--to-intel后,relinker 会把可执行文件和随包模块里的这些指令改写成 Intel 版本。边界在于:运行时由游戏动态生成的 AMD 指令它管不了,这类标题仍然只能上 AMD 主机。Apple 用户则走--macos,产物是 x86-64 Mach-O,在 Apple 芯片上经 Rosetta 执行;--to-rosetta会额外降级 Rosetta 缺少的几条指令。

输入自定义。手柄走 SDL 映射,Xbox 和 PlayStation 手柄自动按 PS 键位识别,摇杆与模拟扳机直通,支持热插拔,无需任何配置。想改键盘鼠标绑定时,在生成的可执行文件旁放一个anyps5-input.ini,格式是动作 = 类型:值,比如Cross = KEY:Space就能让空格当叉键用;没放文件就用内置键位。设备列表与完整格式见 输入映射文档。

当前边界

先说清楚它现在"能"到什么程度:官方验证过的游戏列表非常短——兼容列表 里是 Dreaming Sarah(2D 平台游戏,GTX 1050 Ti + i5-7500 稳定 60 FPS)和一个 DOOM Shareware 的 homebrew 版本,Intel 集显环境尚未验证。README 顶部的进度徽章统计的是项目已声明函数中实现的比例,不是全部 PS5 系统函数的比例,且总数会随声明函数增多而变化,所以别拿这个百分比直接推断"还能玩什么"。

再看"要注意什么"。设计上,任何不支持或未预期的状态会严格抛出std::runtime_error并终止进程——这是刻意的:用崩溃换取问题定位速度,而不是给你一个行为诡异的画面。环境上,Windows 构建目前只支持指定的 MinGW-w64 GCC 15.2.0,且自建的libs/需要配套三个工具链 DLL,它们不会被从系统PATH找,缺失时.prx明明在也会报 error 126;Linux 侧部分显卡驱动走 dma-buf 导入直存内存,用户需要对/dev/udmabuf有读写权限,否则 GPU 直存会失败。这些细节在 使用文档 里都有对应章节。

疑问快答

问题一句话解答
这是破解工具吗?项目声明用途为互操作、研究、保存与兼容性,不含、不分发任何受版权保护的软件、固件或专有库(见 README 免责声明)。
为什么没有模拟器的卡顿感?转换产物是宿主原生代码 + 原生系统库,图形走 Vulkan 编译管线,CPU 层面没有解释或转译层。
libs/里能放原版 PS5 的.prx吗?不能。libs/只放项目构建的系统库;放原版模块在 Windows 上会被当成 DLL 加载,报 error 193。
进度怎么看?README 顶部的 libraries/shaders 徽章与进度图,配合 技术债清单 看哪些行为尚未对齐。
Intel 核显能玩吗?转换时加--to-intel;运行时动态生成的 AMD 指令无法转换,此类标题需要 AMD 主机。

想读源码的话,一条顺畅的路径:先看 架构文档 里两张流程图,把"输入 → relinker 四步 → 宿主程序"的整条链走一遍;再翻 core/relinker 的RelinkerPipeline和 ELF/PE 补丁器,看重定位与动态节是怎么拼出来的;最后到 core/shader/recompiler 看 RDNA 解码到 SPIR-V 的纯函数式编译链。看完这三处,这个项目在你面前就没什么黑盒了。

【免费下载链接】AnyPS5Tool for automatic PS5 executables porting to Linux and Windows项目地址: https://gitcode.com/GitHub_Trending/an/AnyPS5

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询