|
发表于 2021-1-7 00:53:40
|
显示全部楼层
本帖最后由 tangptr@126.com 于 2021-1-7 03:07 编辑
这是产生了#MC异常。看你的DMP应该是取到了MCA错误状态码0xBE000000`01001136,那么
MCi_STATUS.UC=1:错误没有或无法被处理器校正
MCi_STATUS.MISCV=1:MCi_MISC MSR中存有额外的错误记录
MCi_STATUS.ADDRV=1:MCi_ADDRV MSR中存有发生错误的地址
MCi_STATUS.PCC=1:处理器上下文损坏
MCi_STATUS.MS_ERR=0000_0001_0000_0000:要看CPU具体型号才能确定错误代码的意义,你的CPU好像是i7-8750H,但这个u的Model-Specific错误码表还没被Intel公布。
MCi_STATUS.MCA_ERR=0001_0001_0011_0110:缓存体系错误,其中R=0011,T=01,L=10,即Data Cache Level 2 Data Read Error,二级数据缓存发生了数据读取错误。
总之,没被你发出来的内容还有MCi_ADDRV MSR和MCi_MISC MSR的值。以及你没有去看WHEA_ERROR_RECORD结构体的内容,你试着自己仔细阅读并分析成因。
(我玩过的机器不多没遇到过)
参考资料:Intel 64 and IA-32 Architecture Software Developer's Manual, Volume 3B, Chapter 15 Machine-Check Architecture.
MSDN上关于0x124蓝屏的解释:https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/bug-check-0x124---whea-uncorrectable-error
以上内容对你来讲恐怕没什么建设性的东西。下面讲讲我猜的有些建设性的东西。
你确定关掉EPT就没事了么?
有一种情况是:系统正在更新微码。系统试图更新处理器微码,则会造成处理器产生不可预测的行为。我在四代i7上见过奇怪的#PF异常:明明页是正常的,却偏偏产生了页异常。我拦截掉微码更新后这诡异的蓝屏就不见了,我把这个诡异的页异常的原因归结为“系统在VMX Non-Root Operation时更新微码造成了不可预测的行为”。理论上不论你是否开启EPT都会产生“不可预测”的行为。不过“不可预测”这个词的语义范围太广,可以解释为没开EPT时会正常,开了之后就不正常。
如果我正巧言中了,那说白了就是踩了没读透Intel文档的坑,解决方法是:
设置IA32_BIOS_UPDT_TRIG这个MSR的写入拦截(MSR Index=0x79,写入的值是一个虚拟地址)。如果你的VT是以Windows驱动的方式加载的,那么只需要按原样把要写入的MSR的值转发到那个寄存器里即可。原理就是把更新微码的时态从VMX Non-Root Operation搬到VMX Root Operation里。如果你是搞安全的,你可以过滤写入的微码的具体内容,防止攻击者试图给处理器装载恶意微码。(但微码的数据结构未文档化,唯一靠谱的过滤方式只有判断是否为已知的微码,Intel会在GitHub上更新所有处理器的微码,也就是说只能阻止第三方微码,不论恶意与否)
值得注意的是更新微码的时机是不定的,从原则上讲任何时候都有可能,未必只是在操作系统或者固件启动的时候才会更新微码。这个策略主要取决于你的机器主板,机器的主板决定了固件更新微码的策略,从而决定了操作系统更新微码的策略。这还会随着固件版本的不同,操作系统的版本不同导致不一样的更新策略。你的机器的u是intel的,那你应该能注意到mcupdate_GenuineIntel.dll这么一个内核模块,它就是更新intel处理器微码的。(在AMD的u上就能看到mcupdate_AuthenticAMD.dll)。这可以解释为什么你遇到有的机器好端端的。另外就是虚拟机里无法更新微码,因此你在虚拟机里就一切正常。
如果这个解决方法无效,那。。。(你自己慢慢分析吧我就不知道啥情况了哈哈哈哈哈哈哈哈哈哈)
参考资料:Intel 64 and IA-32 Architecture Software Developer's Manual, Volume 3C, Chapter 32.4: Microcode Update Facility. |
评分
-
查看全部评分
|