WinDbg和!chkimg表示了什么腐败?

时间:2016-12-01 14:23:59

标签: windbg memory-corruption

我经常BSODs和WinDbg报告大多数类似的腐败

4: kd> !chkimg -lo 50 -d !nt
    fffff80177723e6d-fffff80177723e6e  2 bytes - nt!MiPurgeZeroList+6d
    [ 80 fa:00 e9 ]
2 errors : !nt (fffff80177723e6d-fffff80177723e6e)

CHKIMG_EXTENSION: !chkimg -lo 50 -d !nt
    fffff8021531ae6d-fffff8021531ae6e  2 bytes - nt!MiPurgeZeroList+6d
    [ 80 fa:00 aa ]
2 errors : !nt (fffff8021531ae6d-fffff8021531ae6e)

这是什么意思?什么与被比较的内容以及腐败是如何相似的?它是否明确指出RAM问题?

更新

这些数字是什么意思? fffff80177723e6dfffff8021531ae6d?这意味着什么,结局是肯定的?

以下代码的含义是什么:nt!MiPurgeZeroList+6d

1 个答案:

答案 0 :(得分:1)

我已经在superuser.com上回答了这个问题。 Windbg从符号服务器下载原始的Exe / DLL,现在chkimg command通过将它们与符号存储上的副本进行比较来检测可执行文件图像中的损坏。

  

比较文件的所有部分,但部分除外   可丢弃的,可写的,不可执行的,具有的   " PAGE"以他们的名义,或来自INITKDBG。你可以改变这个   行为可以使用-ss,-as或-r开关。

     

!chkimg显示图像与文件之间的任何不匹配   图像错误,但以下情况除外:

     
      
  • 不会检查导入地址表(IAT)占用的地址。

  •   
  • 不检查Hal.dll和Ntoskrnl.exe中的某些特定地址,因为加载这些部分时会发生某些更改。   要检查这些地址,请包含-nospec选项。

  •   
  • 如果文件中存在字节值0x90,并且图像的相应字节中存在值0xF0(或副)   反之亦然),这种情况被认为是匹配。通常,符号   server保存一个二进制文件版本,该版本存在于单处理器中   和多处理器版本。在基于x86的处理器上,锁定   指令是0xF0,该指令对应一个nop(0x90)   单处理器版本中的指令。如果你想要!chkimg来   将此对显示为不匹配,请设置-noplock选项。

  •   

如果RAM正常,请检查HDD / HDD电缆是否有错误(磁盘诊断工具并运行chkdsk以检测并修复NTFS问题)。您也可以将硬盘连接到主板上的不同SATA端口。