Windows Vista Build 5000.0.vbl core.040808-2000:修订间差异
跳转到导航
跳转到搜索
Windows Vista Build 5000.0.vbl core.040808-2000 (查看源代码)
2025 年 4 月 18 日 (五) 00:29 的版本
、 2025 年 4 月 18 日 (星期五)→Bug analysis
正义羊-JRJSheep(讨论 | 贡献) |
正义羊-JRJSheep(讨论 | 贡献) |
||
| 第 23 行: | 第 23 行: | ||
默认情况下,此版本有一个严重的 bug,即一旦 Windows 切换到图形模式,它就会挂起,最终出现稳定的蓝色或黑色屏幕,因此在正常情况下无法安装此版本。 | 默认情况下,此版本有一个严重的 bug,即一旦 Windows 切换到图形模式,它就会挂起,最终出现稳定的蓝色或黑色屏幕,因此在正常情况下无法安装此版本。 | ||
== Bug | == Bug 分析 == | ||
''' | '''模块名称:'''<code>win32k.sys</code> | ||
''' | '''原因:'''未初始化的变量,导致 win32k 引发 Access Violation 异常(通过读取 null 指针)并在没有任何通知的情况下失败。 | ||
当 Windows 加载时,它只显示空白的蓝色或黑色背景,没有任何光标或水印。键盘中断也被卡住/未注册。首先检查显示内核空闲循环运行良好并处理中断。WinDbg 中没有异常或错误检查,因此下一个检查是在 <code>nt!ExRaiseStatus</code> 和 <code>nt!ExRaiseAccessViolation</code>,这显然是 <code>win32k</code> 调用并迁离它所在的函数的内容。根据下方的堆栈,它要么在 <code>win32k!EngFreeModule+0x5c9</code>(前面的指令),要么是被调用的函数调用了它: | |||
<pre> | <pre> | ||
f75d6d24 nt!ExRaiseAccessViolation | f75d6d24 nt!ExRaiseAccessViolation | ||
| 第 38 行: | 第 38 行: | ||
</pre> | </pre> | ||
检查代码,它正在调用位于<code>win32k!EngMulDiv+0x29c0</code> 的函数: | |||
<pre> | <pre> | ||
win32k!EngFreeModule+0x5b1: | win32k!EngFreeModule+0x5b1: | ||
| 第 51 行: | 第 51 行: | ||
</pre> | </pre> | ||
在此过程中,使用逐行跟踪(最终调用 <code>ExRaiseAccessViolation</code>)在以下部分中找到: | |||
<pre> | <pre> | ||
win32k!EngMulDiv+0x2b62: | win32k!EngMulDiv+0x2b62: | ||
| 第 63 行: | 第 63 行: | ||
</pre> | </pre> | ||
与 [[Windows Vista Build 5000.0.vbl_core.040809-2000)|Build 5000.040809-2000]] 的 <code>win32k.sys</code> 相比,<code>win32k!HT_Get8BPPMaskPalette+0x3261c (bf9c219c)</code> 在此版本的 <code>win32k.sys</code> 中的是 7fff0000 而不是 00000000。此时,已查明故障的位置。通过与 Build 5000.040808-2000 的 <code>win32k.sys</code> 进行一些额外的比较,发现此地址被填满了: | |||
<gallery> | <gallery> | ||
Snip_0808.jpg| | Snip_0808.jpg|此版本的 <code>win32k.sys</code> | ||
Snip_0809.jpg|[[Windows Vista | Snip_0809.jpg|[[Windows Vista Build 5000.0.vbl_core.040809-2000)|Build 5000.040809-2000)]] 的 <code>win32k.sys</code> | ||
</gallery> | </gallery> | ||