是否存在与Windows 7内核符号相关的已知问题?

Tau*_*lax 7 debugging symbols windbg debug-symbols windows-7

我有一些Windows 7机器,我无法读取他们的内存转储.我发现了一些我怀疑可能有关系的东西,但我并不积极:

https://twitter.com/aionescu/status/634028737458114560

我也发现了这个:http://support.microsoft.com/kb/2528507

但是,在我的任何转储中都没有看到关于文档中给出的wow64exts的场景消息.我也不能在此时应用该修补程序来测试它.所以我只是在寻找更多的信息或意见.

我能够打开任何其他操作系统转储以及我自己的系统的Windows 7转储,但还有另外两台运行Win 7的机器,它告诉我我的内核符号错误.

我已经尝试清除我的符号缓存,重新安装Windows SDK,并尝试在其他两台机器上打开具有相同结果的转储.如果重要,则使用滚动锁定方法手动创建崩溃.

符号路径: SRV*c:\symbols*http://msdl.microsoft.com/download/symbols;

看到这些错误:后跟"引用的类型:nt!_KPRCB"

有没有人知道Alex在twitter链接中提到的问题,以及它是否与我所看到的有关?

Tho*_*ler 9

2015-10-22更新:

在Microsoft补丁日(2015-10-13)和KB3088195中,符号再次可用.

但是,没有提供破损版本的符号,因此下面的内容可能仍然有用.


Microsoft已经发布ntdll了过去的"好"符号,其中包含类似_TEB或的类型信息_KPRCB.从2015年7月中旬开始,Microsoft仍发布符号ntdll,但不包含该信息.

所以它取决于ntdll您是否获得类型信息的版本.引用旧版本的旧转储ntdll将下载包含类型信息的旧PDB,而新转储引用新版本ntdll和WinDbg(或任何其他调试器)下载没有类型信息的PDB.

微软可以追溯删除"好"符号的类型信息,从而使它们"坏"吗?

是.如本回答所述,有一种工具可以从现有PDB中删除类型信息.这样做并取代PDB会产生这样的效果.

微软可以发布那些目前"糟糕"的PDB的"好"版本吗?

这很难说,因为我们不知道微软是否保留了"好"版本的副本,因此他们可以用"好"的版本替换符号服务器上的"坏"版本.ntdll从相同的源代码重建并因此创建新的PDB听起来可能,但PDB获得新的时间戳和校验和.这可以手动纠正,尤其是微软,因为他们应该了解PDB内部格式,但恕我直言,他们不太可能这样做.事情可能会出错,MS很难进行测试以保证这种事情的正确性.

那我该怎么办?

恕我直言,你无法真正纠正这种情况.

你可以假设类型ntdll没有那么多变化.这将允许您使用旧版本wntdll.pdb和新版本ntdll.dll并将ChkMatch -m应用于它.这会将时间戳和校验和从DLL复制到PDB.在您执行该操作后(在空文件夹中),将wntdll.pdb您的符号目录中的现有内容替换为被黑客文件夹.

WinDbg演练(输出缩短为相关内容).我正在使用wntdll.pdb我能在PC上找到的最新版本.

警告:执行以下操作可能会修复类型信息,但可能会破坏callstack的正确性.由于实现中的任何更改(可能用于安全修复)都将更改方法偏移.

0:005> dt nt!_PEB
*************************************************************************
***                                                                   ***
***    Either you specified an unqualified symbol, or your debugger   ***
...
***    Type referenced: nt!_PEB                                       ***
***                                                                   ***
*************************************************************************
Symbol nt!_PEB not found.

0:005> lm m ntdll
start    end        module name
773f0000 77570000   ntdll      (pdb symbols)          e:\debug\symbols\wntdll.pdb\FA9C48F9C11D4E0894B8970DECD92C972\wntdll.pdb

0:005> .shell cmd /c copy C:\Windows\SysWOW64\ntdll.dll e:\debug\temp\ntdllhack\ntdll.dll
        1 file(s) copied.

0:005> .shell cmd /c copy "E:\Windows SDk\8.0\Debuggers\x86\sym\wntdll.pdb\B081677DFC724CC4AC53992627BEEA242\wntdll.pdb" e:\debug\temp\ntdllhack\wntdll.pdb
        1 file(s) copied.

0:005> .shell cmd /c E:\debug\temp\ntdllhack\chkmatch.exe -m E:\debug\temp\ntdllhack\ntdll.dll E:\debug\temp\ntdllhack\wntdll.pdb
...
Executable: E:\debug\temp\ntdllhack\ntdll.dll 
Debug info file: E:\debug\temp\ntdllhack\wntdll.pdb 

Executable: 
TimeDateStamp: 55a69e20 
Debug info: 2 ( CodeView ) 
TimeStamp: 55a68c18  Characteristics: 0  MajorVer: 0  MinorVer: 0 
Size: 35  RVA: 000e63e0  FileOffset: 000d67e0  
CodeView format: RSDS 
Signature: {fa9c48f9-c11d-4e08-94b8-970decd92c97}  Age: 2  
PdbFile: wntdll.pdb 
Debug info: 10 ( Unknown ) 
TimeStamp: 55a68c18  Characteristics: 0  MajorVer: 565  MinorVer: 6526 
Size: 4  RVA: 000e63dc  FileOffset: 000d67dc  

Debug information file: 
Format: PDB 7.00 
Signature: {b081677d-fc72-4cc4-ac53-992627beea24}  Age: 4 

Writing to the debug information file... 
Result: Success.

0:005> .shell cmd /c copy E:\debug\temp\ntdllhack\wntdll.pdb E:\debug\symbols\wntdll.pdb\FA9C48F9C11D4E0894B8970DECD92C972\wntdll.pdb
        1 file(s) copied.

0:005> .reload
Reloading current modules
.............................

0:005> dt nt!_PEB
ntdll!_PEB
   +0x000 InheritedAddressSpace : UChar
   +0x001 ReadImageFileExecOptions : UChar
...

0:005> !heap -s
LFH Key                   : 0x219ab08b
Termination on corruption : DISABLED
  Heap     Flags   Reserv  Commit  Virt   Free  List   UCR  Virt  Lock  Fast 
                    (k)     (k)    (k)     (k) length      blocks cont. heap 
-----------------------------------------------------------------------------
Virtual block: 00920000 - 00920000 (size 00000000)
Virtual block: 02c60000 - 02c60000 (size 00000000)
Virtual block: 02e10000 - 02e10000 (size 00000000)
...
Run Code Online (Sandbox Code Playgroud)

注意:使用ChkMatch这样的优点是您不需要打开.symopt- 100,因为该选项会影响所有PDB文件,并且您不会发现潜在的其他符号问题.如果你不介意使用.symopt,你可以简单地复制一个旧wntdll.PDB的.