启用KVM时QEMU中NT 3.1启动BSOD问题调试求助
NT 3.1在QEMU启用KVM后故障的分析与解决方向
现象总结
- 在QEMU中使用模拟CPU(如
-cpu 486)运行NT 3.1可正常工作 - 启用KVM(
-enable-kvm)后,出现驱动加载失败、DLL无法读取、BSOD等随机异常 - Core2架构Linux机器上启动时必现
0x1e(KMODE_EXCEPTION_NOT_HANDLED)BSOD,对应地址0x8019db89触发0xc0000005访问违例 - 发行版及带完整调试符号的NT 3.1 DDK测试版本表现一致
故障定位细节
- 触发陷阱的指令为
MOV EAX,dword ptr [EAX + 0x28],通过GDB附加QEMU验证是EAX为空导致的访问违例 - 该指令属于注册表hive内存映射函数
HvpBuildMap - 溯源发现
HvInitializeHive中初始化_HHIVE结构(写入签名0xbee0bee0及函数指针)的操作在KVM下静默失败,目标内存区域始终为NULL - 进一步调试确认:执行
MOV dword ptr [ESI],0xbee0bee0指令后,目标内存未被正确写入,但该内存权限为可读写,平坦内存模型下段寄存器不影响地址计算,KVM事件日志无异常记录
测试环境
- QEMU版本:9.1.2
- Linux内核版本:6.1.57,4.x系列内核测试同样存在该问题
问题根源及解决思路
更新:问题本质是NT内核缺少TLB失效处理逻辑,可参考Windows 95的同类修复方案解决。
内容的提问来源于stack exchange,提问作者shadowsnflames
相关产品推荐
相关产品推荐

