在更新了一批 Windows 更新后,ntdll.dll 版本似乎从 6.1.7601 被撞了。188869(25/5/15修改)到 6.1.7601。18933(2015 年 7 月 15 日修改)。
此后,!peb,!teb,!address,也许其他人是因为不再为我工作_PEB和_TEB调试符号缺失(与相同_LDR_DATA_TABLE_ENTRY)。
我在网上找不到任何参考资料,但也许我的 google-fu 很弱。
在更新了一批 Windows 更新后,ntdll.dll 版本似乎从 6.1.7601 被撞了。188869(25/5/15修改)到 6.1.7601。18933(2015 年 7 月 15 日修改)。
此后,!peb,!teb,!address,也许其他人是因为不再为我工作_PEB和_TEB调试符号缺失(与相同_LDR_DATA_TABLE_ENTRY)。
我在网上找不到任何参考资料,但也许我的 google-fu 很弱。
18933 版本应用了各种安全更新,并且符号服务器上的符号已损坏。这就是 WinDbg 无法执行这些命令或为您列出这些结构的原因。
如果这是一台调试机器,我建议暂时恢复这些更新。
从我的跨站点回答:
您可以假设 中的类型ntdll没有发生太大变化。这将允许您使用旧版本wntdll.pdb和新版本ntdll.dll并将ChkMatch -m应用于它。这会将时间戳和校验和从 DLL 复制到 PDB。完成此操作后(在一个空文件夹中),将wntdll.pdb符号目录中的现有替换为被黑的。
WinDbg 演练(输出缩短为相关内容)。我正在使用wntdll.pdb我可以在我的 PC 上找到的最新版本。
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)
...
注意:这样使用ChkMatch的好处是您不需要打开.symopt- 100,因为该选项会影响所有 PDB 文件,并且您不会发现潜在的其他符号问题。如果您不介意使用.symopt,您可以简单地将旧的复制wntdll.PDB到新的上。