diablo_iv_loader.dll暴雪自己的崩溃处理程序随后终止进程,错误显示为 Summary: BREAKPOINT。该错误在用户端表现为错误代码127,崩溃对话框中引用的是 Kernel32.dll。
关键细节:崩溃发生在任何图形层初始化之前——没有D3D12、VKD3D或Vulkan设备创建过程。这确凿地排除了GPU驱动或DXVK问题的可能。
3.1.0补丁更新了应用于 diablo_iv_loader.dll 的打包器和反篡改加密。新的打包器使用的混淆技术会插入一条INT3断点,作为蓄意的反调试和反逆向工程手段。在Windows上,异常调度程序会透明地处理它;而在Wine/Proton下,它就会失败。
PROTON_HIDE_NVIDIA_GPU=1、DRI_PRIME=1 或DXVK配置调整均无效,因为崩溃在任何GPU代码运行之前就已经发生。dstorage.dll(曾在之前补丁中绕过不同的启动崩溃)无法解决此问题。唯一的修复方法是:(a) 暴雪以兼容Wine异常处理的方式重新打包加载器并移除INT3断点,或 (b) 推出Wine/Proton级别的补丁来拦截并处理该特定断点。由于加载器经过混淆和反篡改保护,创建此类补丁既困难又脆弱。
diablo_iv_loader.dll 的断点问题。截至7月2日,该修复尚未发布,Bug报告帖已达到655条回复,论坛流量继续攀升。此事件凸显了PC游戏中一个反复出现的问题:开发者经常更新反篡改和打包系统,却不针对Wine/Proton等兼容层进行测试。反篡改软件的设计初衷就是在非标准环境下表现出不同行为,而微小的变化——新打包器版本或额外的INT3检查——即使游戏本身没有代码更改,也可能静默地破坏Proton兼容性。
同样的模式也曾出现在Denuvo激活上——在频繁切换Proton版本后,Linux用户被锁定。每次,修复都依赖于Valve被动地修补Proton,或游戏开发者推送二进制更新——而在用户发现并报告问题之前,两者都不会发生。暗黑破坏神4这次事件尤其突出,因为它影响到了Steam Deck——一个在3.1.0补丁之前与该游戏完全兼容的商业支持平台。