gow3_pc运行时原理:387个PS4系统API如何被逐一重写,从音频到存档全实现

发布时间:2026/10/16 5:45:13
gow3_pc运行时原理:387个PS4系统API如何被逐一重写,从音频到存档全实现
【免费下载链接】gow3_pcGod of War III Remastered (PS4) for Windows and Linux (experimental AppImage). Original x86-64 code runs directly on the CPU with a custom runtime; graphics use shadPS4s Vulkan video core and cuesta4s fixes. Launcher, in-game menu, controller icons and up to 240 FPS. Requires your own game dump. No game files included.项目地址https://gitcode.com/gh_mirrors/go/gow3_pc点击查看免费下载gow3_pc 是一个《战神3 重制版》God of War III Remastered, PS4的 PC 移植项目其核心是一个自研的gow3_pc 运行时游戏原版 x86-64 代码直接在 PC 处理器上原生运行而运行时逐一手写的 387 个 PS4 系统 API 替代了整台 PS4 主机——从内存、线程、文件系统到音频解码、视频过场、手柄和存档全部重新实现没有任何模拟器。为什么不是模拟器原生运行 系统层替换关键前提PS4 本身就是一台 x86-64 电脑。《战神3》的eboot.bin编译出的指令集与 PC 完全兼容所以游戏代码一个字都不用改直接在你的 CPU 上跑。项目真正要做的是在游戏的周围伪造一台 PS4部分位置作用准备阶段scripts/读取eboot.bin应用重定位把游戏自带的 libc、libSceFios2 链接成一张镜像加载器src/probe.c把镜像载入内存、绑定全部导入、装好钩子并进入游戏原版代码运行时src/runtime_*.c重实现 PS4 系统函数内存、线程、文件、音频、视频、手柄、存档、服务图形gpu/shadps4/shadPS4 视频核心把 PS4 GPU 指令和着色器翻译成 Vulkan图形侧由 shadPS4 负责本文聚焦 CPU 侧的运行时。第一步用 NID 哈希盘点 387 个系统 APIPS4 的库导入不直接用函数名而是用一段随机哈希NID。在 src/import_names.inc 里可以看到这种对应关系{bzQExy189ZI#libc,_init_env}, {7H0iTOciTLo#libkernel,pthread_mutex_lock},加载器按NID#库名去解析每一个重定位项把哈希换回真实函数名。项目提供了一条不启动游戏就能清点 API 的命令gow3-probe.exe out/boot-linked.bin --app0 游戏目录 --check-imports在 CUSA01623 v01.02 的 dump 上这条命令盘点了387 个导入最初 45 个没有实现35 个由游戏直接调用10 个只被 libc/Fios2 引用清单记录在 docs/gow3/ROADMAP.md 的Etapa 3一节。此后这 45 个被逐一补齐现在--check-imports的 missing 数为 0。值得一提的是加载器的不兜底哲学每个未解析的导入都会被绑到一段 32 字节的陷阱 stub一旦游戏真的跳进去程序立刻打印STOP: first unsupported PS4 import并退出见 src/probe.c 的unresolved处理。绝不提供假装成功的空桩——宁可停下来告诉你缺什么也不悄悄返回假数据。逐一重写16 个模块对号入座src/runtime.c 中的runtime_resolve是总调度拿到一个导入名后按顺序询问各子系统的解析器谁认领谁实现mutex → thread → content → time → sema → rwlock → memory → kernel → services → ajm → videodec → audio → pad → rtc → savedata → file → GPU库每个模块负责一块 PS4 系统能力子系统模块实现方式虚拟内存runtime_memory.cPS4 direct pool 用单个稀疏 memfd 打底Windows 用 pagefile section任意物理区映射共享同一存储线程runtime_thread.c游戏线程跑在宿主 pthread 上每个线程拥有 FreeBSD 风格 TCBLinux 占用 GS 段基址Windows 塞进 TEB 的 TLS 槽互斥/信号量/读写锁runtime_mutex.c、runtime_sema.c、runtime_rwlock.cpthread 互斥锁、32 位 ID FIFO 等待队列、Linux rwlock全部对齐 PS4 的指针-句柄 ABI进程服务runtime_kernel.c时钟、睡眠、pthread_once/key、sysctlerrno 按 FreeBSD 编号映射宿主的 errno 值永远不会直接漏给游戏时间runtime_time.c、runtime_rtc.ctimeval显式布局RTC 采用 PS4 惯例——自公元 0001-01-01 起的微秒计数文件系统runtime_file.c把/app0、/temp0、/download0等挂载点映射到宿主目录含..的路径直接拒绝音频解码runtime_ajm.cATRAC9 由 LibAtrac9 解码MP3 由 FFmpeg 解码runtime_mp3.c批次同步提交、同步完成音频输出runtime_audio.clibSceAudioOut 架在 SDL3 音频流上25 个端口、7.1 下混视频解码runtime_videodec.cFFmpeg 把 H.264 过场解成游戏指定的 NV12 帧缓冲手柄runtime_pad.cSDL3 手柄 键盘回退DualSense、Xbox 及通用手柄键位可重映射存档runtime_savedata.clibSceSaveData 落到宿主目录元数据放在存档目录旁边系统服务runtime_services.c离线单用户主机的全部合同每次运行结束时runtime_report会汇总各模块的调用计数内存操作数、线程数、pad 读取次数等这些数字也是调试时的重要线索。音频两种解码器 无爆音输出节奏《战神3》同时用 ATRAC9 和 MP3两种解码器都由运行时接管。runtime_audio.c 有一段很见功力的注释游戏的 FMOD 混音线程每次读取 256 帧如果sceAudioOutOutput按设备实际拉数据的节奏突发返回输出线程会超车混音器每 10.7 毫秒就爆一下音。运行时因此让输出线程按稳定时钟逐周期返回并用 SDL 队列水位控制吸收设备时钟漂移。另一处细节是 7.1 下混SDL 自带矩阵把前置声道压到约 -13.5 dB游戏会变得非常安静运行时自己实现下混——前置全量、中置与环绕 -3 dB、丢弃 LFE 再限幅。存档一个目录就是 PS4 存档格存档直接映射到宿主文件夹结构严格模仿 PS4见 runtime_savedata.c 顶部注释user/savedata/1/CUSA01623/存档目录/ 游戏写入的文件 user/savedata/1/CUSA01623/存档目录.sce_sys/ param.bin、icon0.png元数据标题、图标等 1328 字节的OrbisSaveDataParam放在目录旁边绝不污染游戏自己的文件。存档列表对话框则在游戏内以覆盖层显示与 PS4 上的表现一致。系统服务伪造一台离线单机主机runtime_services.c 的开头就写明了整个合同一个 id 为 1 的本地用户已登录但未登录 PSN网线没插NetCtl 断连、socket 不可用系统对话框立即完成整包游戏已安装完毕PlayGo 报告每个 chunk 都在本地。PSN 相关 API 一律返回未连接从不假装在线——未知函数仍然直接 STOP这条边界保证了移植的可信度。如何验证导入检查与测试套件想确认游戏用到的每个系统函数都被实现了无需真正启动游戏跑一遍导入检查即可见 README.md 的 Tests 一节gow3-probe.exe out/boot-linked.bin --app0 游戏目录 --check-imports退出码为 1 且打印MISSING:行说明仍有缺口。项目测试同样按子系统划分tests/test_runtime.c、tests/test_mp3.c、tests/test_videodec.c、tests/test_audio_downmix.c、tests/test_pad.c、tests/test_sema.c、tests/test_services.c跑法是python -m unittest discover -s tests加bash build.sh --test。相关资料总览与构建说明README.md进度与 API 盘点清单docs/gow3/ROADMAP.md运行时入口与总调度src/runtime.c、src/probe.cNID 与符号对照表src/import_names.inc内存/线程/文件/存档实现src/runtime_memory.c、src/runtime_thread.c、src/runtime_file.c、src/runtime_savedata.c音频与视频解码src/runtime_ajm.c、src/runtime_mp3.c、src/runtime_audio.c、src/runtime_videodec.c小结gow3_pc 的运行时本质上是一份PS4 系统 API 的逐条重写清单——387 个导入逐一落到 16 个模块音频、视频、存档、手柄、服务无一例外配合未知即 STOP、检查可离线的工程纪律这份清单既是实现也是可验证的完成度证明。赞分享【免费下载链接】gow3_pcGod of War III Remastered (PS4) for Windows and Linux (experimental AppImage). Original x86-64 code runs directly on the CPU with a custom runtime; graphics use shadPS4s Vulkan video core and cuesta4s fixes. Launcher, in-game menu, controller icons and up to 240 FPS. Requires your own game dump. No game files included.项目地址https://gitcode.com/gh_mirrors/go/gow3_pc点击查看免费下载相关推荐Leaflet-search移动端适配打造响应式地图搜索体验的终极指南Leaflet search移动端适配打造响应式地图搜索体验的终极指南 在当今移动优先的时代为地图应用提供优秀的移动端体验至关重要。Leaflet searUI库/组件PyFlink DataStream API 实战教程从零编写并运行一个 Python 词频统计作业PyFlink DataStream API 实战教程从零编写并运行一个 Python 词频统计作业 Apache Flink 的 DataStream AP后端大数据流处理批处理React Native Collapsible源码解析深入理解动画实现原理React Native Collapsible源码解析深入理解动画实现原理 React Native Collapsible是一个功能强大的动画折叠组件专音视频后端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考