不用模拟器也能玩PS5游戏?拆解AnyPS5的“非模拟器魔法“:relinker重链接+PRX库+RDNA到SPIR-V
不用模拟器也能玩PS5游戏拆解AnyPS5的非模拟器魔法relinker重链接PRX库RDNA到SPIR-V【免费下载链接】AnyPS5Tool for automatic PS5 executables porting to Linux and Windows项目地址: https://gitcode.com/GitHub_Trending/an/AnyPS5PS5 上的 x86-64 游戏能不能不经过模拟器直接在 PC 上原生运行开源项目 AnyPS5 给出了一个大胆且与众不同的答案不模拟、不翻译执行而是把 PS5 可执行文件静态移植成 Linux/Windows 原生程序。项目自称 Tool for automatic PS5 executables porting to Linux and Windows在 cnBeta、3DM 等游戏媒体的报道中直接运行 PS5 游戏成为话题焦点而在技术社区里人们更关心它背后那条relinker 重链接 PRX 系统库 RDNA 到 SPIR-V 着色器重编译的三步链路。本文结合仓库源码与公开情报拆开这层非模拟器魔法讲清楚它为什么不需要 CPU 模拟、如何用可运行桩 真实核心的策略把移植成本压到最低以及它今天到底能跑到什么程度。一个移植器而不是模拟器先厘清概念。传统思路是模拟器在 PC 上再造一个 PS5 软件环境CPU 指令逐条解释或二进制翻译游戏跑在模拟器进程内部。AnyPS5 完全不是这个路线——它的 README 说得直白Includes a relinker that converts executable to the target systems native format and implementations of system prx libraries suitable for dynamic linking.No emulation or separate runtime process.也就是说转换后的游戏就是一个普通的原生进程CPU 指令直接执行图形走 Vulkan 原生管线系统调用和库函数链接到项目自研的 PRX 实现。所有翻译工作都在构建期完成运行时没有任何中间层开销。这也是社区文章反复强调没有进程开销、没有固件依赖的根源。三步核心链路AnyPS5 的完整流水线可以精确对应到仓库里三个核心目录core/relinker重链接器、core/libs/prx系统库实现、core/shader/recompiler着色器重编译器。架构文档 docs/dev/ARCHITECTURE.md 给出了两条清晰的流程图。第一步relinker 重链接——把 PS5 ELF 变成原生 ELF/PE入口在 core/relinker/main.cpp它按固定顺序执行整个转换auto result pipeline-Relink(sourceBytes); // ...应用 patch... guestArtifacts Relinker::GuestModuleBuilder().Build(...); fileWriter.Write(absPath, executableBytes);RelinkerPipeline声明见 RelinkerPipeline.hpp承担了核心工作读取 ELF、按 NID 解析导入、扫描系统调用SyscallScanner、过滤未使用的 NID、构建 SysV 动态节最后由LinuxElfPatcher或WindowsPePatcher分别输出 Linux ELF 或 Windows PE。这里的关键在于 PS5 的系统库符号不是普通名字而是一串 11 字符的NID。NID 的算法实现在 NidCompute.cpp对符号名 16 字节固定后缀做 SHA-1取摘要中 8 个字节反转后用自定义的 base64 字母表编码成 11 个字符。重链接器解析出游戏引用了哪些 NID、哪个库、哪个调用位置然后为它们生成新的动态节同时GuestModuleBuilder 还会把游戏自带的sce_module/*捆绑模块一并转换输出到app0/下。最终产物的运行布局是app.elf (Linux) 或 app.exe (Windows) libs/ ← 自研系统库 *.prx app0/ ← 游戏资源 转换后的模块值得注意的细节还有两个一是--to-intel选项见 docs/user/USAGE.mdPS5 的 AMD CPU 上有少数 AMD 专属指令如VRSQRTPS、VRCPPS在 Intel 主机上无法执行relinker 会用 codegen 在构建期把它们降级或替换成跳板trampolinemain.cpp里逐条打印 Intel substitution 日志二是unused-filter0/1/2三级未用符号过滤策略从全量保留到基于 CFG/GOT 分析的严格可达性分析粒度越细输出越小但对输入 ELF 的合规性要求越高——这正是社区那篇三级未用符号过滤终极对比文章讨论的技术细节。第二步自研 PRX 系统库——用 C 重写 PS5 的 libSce*PS5 游戏依赖一整套系统库输入、音频、图形驱动、HTTP、字体、存档、对话框……AnyPS5 的策略不是在运行时劫持而是为每个库编写一份原生 C 实现编译成共享库.prx构建后由nid_patchercore/libs/nid把每个导出符号重命名为其 NID这样游戏按 NID 动态链接时就能命中这些实现core/libs/prx/* → 编译为共享库 → nid_patcher 重命名导出 → libs/*.prx以 libScePad/Export.cpp 为例它实现了scePadGetControllerInformation、scePadGetHandle、scePadDeviceClassParseData等 API不仅返回结构体连细节都很讲究触摸板分辨率 1920×943、摇杆死区 2、连接类型LOCAL、错误码严格对齐 PS5 原生语义如PAD_ERROR_DEVICE_NOT_CONNECTED 0x80920007。输入层还通过 SDL 支持手柄自动识别与键鼠映射配置见 docs/user/INPUT_MAPPING.md。库的覆盖面从环境列表可见一斑libSceAgcDriver、libSceAgc、libSceAudioOut、libScePad、libSceFont、libSceVideoOut、libSceHttp、libSceAvPlayer、libSceSaveData、libSceNpTrophy2……几十个库各有 Export.cpp。社区那篇libSceHttp HTTP 客户端移植实录就是这类工作的一个缩影Uri.cpp 实现了符合 RFC 3986 的sceHttpUriParse/sceHttpUriBuild/sceHttpUriEscape包括 scheme 识别、removeDotSegments路径归并、默认端口推断以及用掩码标志位URI_BUILD_WITH_SCHEME、URI_BUILD_WITH_HOSTNAME…控制拼装——严格遵循 PS5 错误码规范与两次调用缓冲区协议。转换出的游戏到底缺哪些符号relinker --registry会生成registry.json清单配合 tools/import_audit.py 可在启动前审计每个导入被归为implemented已实现、stub桩调用即抛错、absent缺失加载失败或module游戏自带模块四类见 docs/user/USAGE.md。这构成了整个项目的兼容性仪表盘。第三步RDNA 着色器重编译——RDNA3 汇编到 SPIR-VPS5 的 GPU 是 RDNA 架构游戏里内嵌的是 RDNA ISA 着色器实为 PM4 命令缓冲区中的着色器二进制。PC 上的 Vulkan 只认 SPIR-V所以 AnyPS5 必须自己写一个着色器重编译器。流水线在 Recompiler.cpp 中按五级串联源码里的 include 顺序就是执行顺序RdnaDecoder解码 RDNA 指令RdnaInstructionDecoder::DecodeControlFlow用GraphBuilder建 CFG再用Structurizer结构化TranslationRDNA 指令逐条翻译到项目自研的中间表示IROptimizationSSA 构建、常量折叠、死代码消除、描述符绑定分配等一连串优化 passSpirvBackend由SpirvEmitter最终发射 SPIR-V构建时开启ANYPS5_ENABLE_SPIRV_TOOLS还会用 SPIRV-Tools 做校验与优化。图形链路的前端由 libSceAgcDriver 承担游戏提交的 DCB/ACB 命令缓冲区先被解析成 PM4 包状态、draw、dispatch解析逻辑见 Pm4.cpp命中的着色器经重编译后进入 Vulkan pipeline编译产物由ShaderDiskCache缓存到磁盘后续运行直接复用。这条链路里最有技术含量的是执行语义映射。RDNA 的 wave 是 32/64 线程一组的执行单位而主机 Vulkan 的 subgroup 宽窄因硬件而异见仓库测试 Wave32WideSubgroup.cpp。重编译器在RecompileRequest里携带目标 subgroup 大小HostSubgroupSize()还会读取APS5_SINGLE_LANE环境变量做单车道调试。此外还有s_saveexec/s_swappc等标量指令语义、VK_KHR_fragment_shader_barycentric缺失时的回退路径TechnicalDebt.md 中诚实记录了这些已知边界。社区那篇wave32 移植实录32 宽波语义如何映射到 Vulkan 子组讲的正是这块仓库里 BdaShader.cpp、Structurizer.cpp 等测试专门验证映射正确性。为什么 CPU 不需要模拟构建期完成一切转换模拟器最大的性能杀手是 CPU 翻译。AnyPS5 能绕开它源于一个结构性的巧合PS5 和 PC 都是 x86-64。游戏里的 CPU 代码本身就是 x86-64 机器码无需翻译、无需 JIT只要做两件事重定位把 PS5 的内存布局地址、重定位、TLS、动态节改写成目标系统的 SysV 布局让加载器能正确装载——这正是 relinker 干的事重定向系统调用与导入游戏调用的内核 syscall 和 libSce* 函数被重写为指向自研 PRX 实现。这两步全部发生在构建期的一次relinker调用里。运行期呢游戏就是一个普通原生进程CPU 指令直接执行只有对系统库的调用会进入自研 PRX。这意味着没有解释器、没有二进制翻译、没有模拟进程运行期开销趋近于零——这是社区文章运行期零翻译开销、纯原生进程布局说法的代码级依据。唯一例外的 CPU 层面工作是对 AMD 专属指令的降级--to-intel但同样是在构建期一次性完成而且只针对 Intel 主机。可运行桩 真实核心策略降低移植成本的关键从零实现几十个 PS5 系统库的每一个函数工作量是天文数字。AnyPS5 的解法可以概括为一句工程哲学每个函数要么做它该做的事要么明确地失败。机制很硬核未实现的函数统一调用NotImplemented_nid_no_patch抛std::runtime_error并终止进程。见 libSceAgcDriver/Unimplemented.cppint APS5_VABI sceAgcDriverGetShaderDebuggingStatus() { NotImplemented_nid_no_patch(__func__); return 0; }README 明确写道Unsupported or unexpected states strictly throwstd::runtime_error。what()is printed to stderr and the process terminates. 这种宁可崩不可错的哲学让兼容性边界完全可定位——任何未覆盖的函数都会立刻暴露而不是静默产生错误行为。而在函数已实现的路径上则是尽量完整的真实核心。以 libScePad/Export.cpp 为例错误码、设备信息、触控板分辨率都按真实语义返回Uri.cpp 把 URI 解析做成符合 RFC 3986 的完整实现libSceAgcDriver 更是把 PM4 解析、绘制、present、纹理格式、DCC 元数据等一整套图形栈都搬进了 CMakeLists.txt 的上百个源文件里。技术债文档 docs/dev/TechnicalDebt.md 则毫不遮掩地记录了静默桩清单部分对话框只跑状态机不显示 UI、libSceHttp2 请求不出网、libSceAudio3d 不出声、libSceHmd2 直接失败让游戏跳过 VR 初始化……这些可运行桩不是糊弄而是精心设计的降级路径让游戏能走完启动序列、进到主循环把稀缺的工程资源集中在真正决定能不能玩的库上。这正是可运行桩 真实核心策略的完整面貌——桩负责不阻塞运行核心负责给出正确结果。现状与边界跑起来有多远任何宣传都要回到数据。兼容性列表 docs/user/COMPATIBILITY.md 目前只有一款完成验证的游戏Dreaming SarahPPSA02929Windows 平台可玩在 GTX 1050 Ti / i5-7500 上稳定 60 FPS核显 Intel HD Graphics 620 上 36 FPS。这个数字本身就说明了项目定位3D 大作还远但 2D 平台游戏已经可以在中低端硬件上原生流畅运行且 README 明确指出着色器重编译产物已通过 SPIRV-Tools 校验。社区的讨论也相当理性3DM 报道指出项目目前尚无法完整运行游戏关于 GPL v2 许可与商业游戏的法律边界项目在 README 的 Disclaimer 里做了明确声明——仅面向互操作、研究、保存与兼容性目的不包含也不分发任何受版权保护的软件或固件。技术上项目通过 docs/dev/PROGRESS.md 的进度地图、库覆盖率和着色器指令覆盖 badge 动态呈现还有多少路要走。回到标题的问题不用模拟器能玩 PS5 游戏吗AnyPS5 的答案是——不是玩 PS5 游戏而是把 PS5 游戏变成 PC 游戏。relinker 在构建期完成格式转换PRX 库在运行期提供原生系统服务RDNA 重编译器把 GPU 代码翻译成 Vulkan 生态的 SPIR-V三者缺一不可。这条路牺牲了打开即玩的通用性换来了原生进程的性能与简洁。当游戏库的覆盖率和 RDNA 指令集支持度继续爬升时这条非模拟器路线会走多远值得整个开源生态持续关注。【免费下载链接】AnyPS5Tool for automatic PS5 executables porting to Linux and Windows项目地址: https://gitcode.com/GitHub_Trending/an/AnyPS5创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

基于A星算法的无人机三维路径规划Matlab实现与优化

基于A星算法的无人机三维路径规划Matlab实现与优化

做无人机的人基本都绕不开路径规划这道坎。“基于A星算法的无人机三维路径规划算法研究(Matlab代码实现)” 这个题目看着规整,但真正落地的时候,坑比想象的多:地图怎么建、邻居节点怎么扩展、启发函数怎么写才能既快又…

2026/10/12 0:51:25 阅读更多 →
VS Code 中直接使用 Codex 教程及连接失败解决方案:TaoToken 统一 Key 接入与排错实录

VS Code 中直接使用 Codex 教程及连接失败解决方案:TaoToken 统一 Key 接入与排错实录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 0:50:24 阅读更多 →
企业 Agent 提示词注入防御实战:双重护栏与对抗语义检测

企业 Agent 提示词注入防御实战:双重护栏与对抗语义检测

在企业将多智能体(Multi-Agent)系统接入客服咨询、内部知识检索或自动化办公流后,安全攻防的对抗维度发生了一场根本性范式转移:传统的 SQL 注入或跨站脚本攻击(XSS)正在退居二线,而以自然语言为…

2026/10/12 0:47:23 阅读更多 →

最新新闻

一条命令让 AI Agent 具备逆向工程能力:REA 快速上手

一条命令让 AI Agent 具备逆向工程能力:REA 快速上手

一条命令让 AI Agent 具备逆向工程能力:REA 快速上手 【免费下载链接】rea Reverse engineer anything with agents, from app behavior down to native binaries. 项目地址: https://gitcode.com/GitHub_Trending/rea2/rea REA(Reverse Engineer…

2026/10/12 1:36:52 阅读更多 →
InterviewGuide 刷题笔记:LeetCode 225 用队列实现栈——双队列与单队列解法详解

InterviewGuide 刷题笔记:LeetCode 225 用队列实现栈——双队列与单队列解法详解

文档教程知识库 【免费下载链接】InterviewGuide 🔥🔥「InterviewGuide」是阿秀从校园->职场多年计算机自学过程的记录以及学弟学妹们计算机校招&秋招经验总结文章的汇总,包括但不限于C/C 、Golang、JavaScript、Vue、操作系统、数据结…

2026/10/12 1:36:52 阅读更多 →
Koharu 运行时同步技能解析:用编码 Agent SKILL 维护 llama.cpp 与 stable-diffusion.cpp 绑定

Koharu 运行时同步技能解析:用编码 Agent SKILL 维护 llama.cpp 与 stable-diffusion.cpp 绑定

【免费下载链接】koharu ML-powered manga translator, written in Rust. 项目地址: https://gitcode.com/gh_mirrors/ko/koharu 点击查看 免费下载 本文围绕 Koharu 仓库中面向编码 Agent 的 runtime 技能(.agents/skills/runtime/SKILL.md&#xff09…

2026/10/12 1:36:52 阅读更多 →
蓝鲸配置平台(bk-cmdb)批量创建项目接口 batch_create_project 实战指南

蓝鲸配置平台(bk-cmdb)批量创建项目接口 batch_create_project 实战指南

后端企业应用运维 【免费下载链接】bk-cmdb 蓝鲸智云配置平台(BlueKing CMDB) 项目地址: https://gitcode.com/gh_mirrors/bk/bk-cmdb 点击查看 免费下载 本篇以 docs/apidoc/apigw/open/en/batch_create_project.md 为核心,结合 bk-cmdb 源码&#xff…

2026/10/12 1:36:52 阅读更多 →
浏览器里剪视频成真了:FilmCraft Web 版架构全拆解(WebCodecs + OPFS)

浏览器里剪视频成真了:FilmCraft Web 版架构全拆解(WebCodecs + OPFS)

浏览器里剪视频成真了:FilmCraft Web 版架构全拆解(WebCodecs OPFS) 【免费下载链接】filmcraft An open-source, clean-room reimplementation of Adobe Premiere Pro built in pure Rust. 项目地址: https://gitcode.com/gh_mirrors/fi/…

2026/10/12 1:36:52 阅读更多 →
指针模块总结

指针模块总结

1.指针的认识和应用int val 0 char* a &val; char* *b &a; //指针就是取地址,分指针等级 char* pa,pb; //pa是char* pb是char char* pa,*pb; //pa pb都是char* typedef; 是对变量进行重命名 // typedef char* PChar PChar pa,pb char* pa,*pb 变量名升…

2026/10/12 1:35:51 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →