From 6bf998176594193b48524f4b5e68ea94cfa480b6 Mon Sep 17 00:00:00 2001 From: SCHOOL Date: Wed, 23 Sep 2026 15:08:27 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=A5=A5=E6=97=A52=E6=8E=92?= =?UTF-8?q?=E9=9A=9C=E8=AE=B0=E5=BD=95=EF=BC=9AWwise=20=E7=BA=BF=E7=A8=8B?= =?UTF-8?q?=E4=BA=B2=E5=92=8C=E6=80=A7=E6=95=85=E9=9A=9C=E5=AE=9A=E4=BD=8D?= =?UTF-8?q?=E4=B8=8E=E5=85=BC=E5=AE=B9=E8=A1=A5=E4=B8=81=EF=BC=88=E6=96=87?= =?UTF-8?q?=E7=AB=A04=E7=AF=87+=E8=A1=A5=E4=B8=81=E5=8C=85+=E8=AF=8A?= =?UTF-8?q?=E6=96=AD=E8=84=9A=E6=9C=AC4=E4=B8=AA=EF=BC=8C=E5=B7=B2?= =?UTF-8?q?=E8=84=B1=E6=95=8F=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ori-wotw-troubleshooting/工具/README.md | 104 ++++ .../工具/ori_audio_probe.py | 84 +++ ori-wotw-troubleshooting/工具/ori_debug.py | 245 +++++++++ ori-wotw-troubleshooting/工具/ori_launch.py | 33 ++ .../工具/probe_affinity.py | 26 + .../文章/博客模板-奥日2加载闪退修复.md | 322 ++++++++++++ .../文章/博客稿-奥日2排障记.md | 410 +++++++++++++++ .../文章/奥日2崩溃研究报告.md | 480 ++++++++++++++++++ .../文章/奥日2网络方案核查.md | 110 ++++ .../补丁包/ori-wwise-affinity-fix-v1.0.0.zip | Bin 0 -> 31724 bytes .../ori-wwise-affinity-fix-v1.0.0.zip.sha256 | 1 + .../COMMUNITY-REVIEW.zh-CN.md | 110 ++++ .../ori-wwise-affinity-fix-v1.0.0/EVIDENCE.json | 61 +++ .../ori-wwise-affinity-fix-v1.0.0/Install.cmd | 8 + .../Interactive.ps1 | 15 + .../Ori-AudioFix.ps1 | 112 ++++ .../README.zh-CN.md | 94 ++++ .../RESEARCH.zh-CN.md | 480 ++++++++++++++++++ .../ori-wwise-affinity-fix-v1.0.0/Restore.cmd | 8 + .../ori-wwise-affinity-fix-v1.0.0/SHA256SUMS.txt | 9 + .../environment.json | 103 ++++ 21 files changed, 2815 insertions(+) create mode 100644 ori-wotw-troubleshooting/工具/README.md create mode 100644 ori-wotw-troubleshooting/工具/ori_audio_probe.py create mode 100644 ori-wotw-troubleshooting/工具/ori_debug.py create mode 100644 ori-wotw-troubleshooting/工具/ori_launch.py create mode 100644 ori-wotw-troubleshooting/工具/probe_affinity.py create mode 100644 ori-wotw-troubleshooting/文章/博客模板-奥日2加载闪退修复.md create mode 100644 ori-wotw-troubleshooting/文章/博客稿-奥日2排障记.md create mode 100644 ori-wotw-troubleshooting/文章/奥日2崩溃研究报告.md create mode 100644 ori-wotw-troubleshooting/文章/奥日2网络方案核查.md create mode 100644 ori-wotw-troubleshooting/补丁包/ori-wwise-affinity-fix-v1.0.0.zip create mode 100644 ori-wotw-troubleshooting/补丁包/ori-wwise-affinity-fix-v1.0.0.zip.sha256 create mode 100644 ori-wotw-troubleshooting/补丁包/ori-wwise-affinity-fix-v1.0.0/COMMUNITY-REVIEW.zh-CN.md create mode 100644 ori-wotw-troubleshooting/补丁包/ori-wwise-affinity-fix-v1.0.0/EVIDENCE.json create mode 100644 ori-wotw-troubleshooting/补丁包/ori-wwise-affinity-fix-v1.0.0/Install.cmd create mode 100644 ori-wotw-troubleshooting/补丁包/ori-wwise-affinity-fix-v1.0.0/Interactive.ps1 create mode 100644 ori-wotw-troubleshooting/补丁包/ori-wwise-affinity-fix-v1.0.0/Ori-AudioFix.ps1 create mode 100644 ori-wotw-troubleshooting/补丁包/ori-wwise-affinity-fix-v1.0.0/README.zh-CN.md create mode 100644 ori-wotw-troubleshooting/补丁包/ori-wwise-affinity-fix-v1.0.0/RESEARCH.zh-CN.md create mode 100644 ori-wotw-troubleshooting/补丁包/ori-wwise-affinity-fix-v1.0.0/Restore.cmd create mode 100644 ori-wotw-troubleshooting/补丁包/ori-wwise-affinity-fix-v1.0.0/SHA256SUMS.txt create mode 100644 ori-wotw-troubleshooting/补丁包/ori-wwise-affinity-fix-v1.0.0/environment.json diff --git a/ori-wotw-troubleshooting/工具/README.md b/ori-wotw-troubleshooting/工具/README.md new file mode 100644 index 0000000..607e4c2 --- /dev/null +++ b/ori-wotw-troubleshooting/工具/README.md @@ -0,0 +1,104 @@ +# 诊断脚本说明 + +这 4 个脚本是 2026-09-16 那轮定位用到的全部工具,用 Python 标准库写的,**不需要装任何第三方包**。 + +对应的技术报告见 `../文章/奥日2崩溃研究报告.md` 第 5 节(动态实验设计及结果)。 + +--- + +## 每个脚本做什么 + +### 1. `ori_debug.py` — 核心诊断器 + +用 Windows 调试接口**启动自己的游戏子进程**(不是附加到别的进程,也不装系统钩子), +在音频线程初始化附近的指令上打临时断点(INT3),记录寄存器、参数、返回值和**目标线程自己的** LastError。 + +这是抓到"`SetThreadAffinityMask` 返回 0、错误码 87"那个关键证据的工具。 + +```powershell +# 只校验 DLL 哈希,不启动游戏 +python ori_debug.py --game "D:\Games\Ori and the Will of the Wisps" --check + +# 原始运行:只下断点观察,不做任何修改 +python ori_debug.py --game "D:\Games\..." --seconds 40 --output ori-evidence/runtime-original + +# 对照实验 A:把掩码截断到进程可用范围(用来否掉"高位越界"假设) +python ori_debug.py --game "D:\Games\..." --clamp-affinity + +# 对照实验 B:在进程内把 setter 写入的掩码改成 0(临时验证,不落盘) +python ori_debug.py --game "D:\Games\..." --automatic-affinity +``` + +**两道安全检查:** + +- 启动前先算 `AkSoundEngine.dll` 的 SHA-256,不符就拒绝下断点 +- 关闭时只终止**自己创建的那个**进程,不会碰任何其它游戏会话 + +### 2. `ori_launch.py` — 普通启动器 + +不带调试器、不改内存,用来验证"**普通启动也通过**"——这才排除了"只有调试器下才成功"的可能。 + +```powershell +python ori_launch.py --game "D:\Games\Ori and the Will of the Wisps" --label normal-patched-1 +``` + +它会先确认补丁已安装(校验**补丁后**的哈希),没装就直接退出。输出目录是相对于当前目录的 +`ori-evidence/