如何验证 Windows 调试符号

支持的 Windows Vista Service Pack 1 (SP1) 结束在 2011 年 7 月 12 日。要继续接收 windows 的安全更新,请确保您正在运行 Windows Vista with Service Pack 2 (SP2)。有关详细信息,请参阅此 Microsoft 网页:。

摘要

内核调试程序启动后,必须验证 Windows 调试符号 (I386kd.exe |Windbg.exe)。 但调试器可能会加载并显示一个提示,如果符号不正确,以后的调试命令不引用正确的函数和变量,从而导致偶发性的结果。下面列出了几个红色标志和几个符号的位置检查有效性的方法。

更多信息

本文假定内核调试程序正在运行和已加载 Memory.dmp 文件或连接到远程计算机。显示的命令不充分的文档记录,并显示摘录输出。

文章内容

  • 装入内核调试器

  • 检查使用的创建时间 ! 驱动程序

  • 使用 Link.exe 来检查创建时间

  • Unassembling 函数

  • 服务包符号

装入内核调试器

正常加载的内核调试程序显示以下提示之一:

kd > 单处理器系统 0: kd > 多处理器系统下面显示的提示表明 Ntoskrnl.exe 文件的符号文件不正确。检查以确保适当的多处理器或处理器内核和 HAL 将复制到该符号树。 示例:Symbol search path is: C:\symbolskd: crash dump initialized [c:\dump\memory.dmp]could not determine the current processor, using zeroKernel Version 1057 Free loaded @ 0x80100000Bugcheck 0000001e : c0000005 80151d5b 00000000 00000001*** Contents Deleted ***16kd> 当内核调试程序加载内核版本,以及处理器计数 Memory.dmp 文件的前几行中显示。确认处理器计数对应于正确的内核和 HAL。加载或推迟或者符号将显示驱动程序符号信息。 示例加载:Symbol search path is: C:\symbolskd: crash dump initialized [c:\dump\memory.dmp]Kernel Version 1057 Free loaded @ 0x80100000Bugcheck 0000001e : c0000005 80151d5b 00000000 00000001re-loading all kernel symbolsKD: unloading symbols for "ntoskrnl.exe"KD: deferring symbol load for "ntoskrnl.exe" at 80100000KD: Loaded (2248) fpo entries for image (ntoskrnl.exe)KD: "ntoskrnl.exe" loaded 4074 symbols (80100000-801bbb80)KD: loaded symbols for "ntoskrnl.exe"KD: deferring symbol load for "atapi.sys" at fc810000KD: deferring symbol load for "diskdump.sys" at fc800000KD: deferring symbol load for "hal.dll" at 80400000KD: deferring symbol load for "atapi.sys" at 80010000KD: deferring symbol load for "SCSIPORT.SYS" at 80013000KD: deferring symbol load for "Atdisk.sys" at 80001000KD: deferring symbol load for "Scsidisk.sys" at 8001b000KD: deferring symbol load for "Fastfat.sys" at 80372000Unable to read image header for Floppy.SYS at fc820000 - status c0000001*** Contents Deleted ***KD: deferring symbol load for "srv.sys" at fc9e0000KD: deferring symbol load for "ntdll.dll" at 77f80000finished re-loading all kernel symbolsNT!_PspUnhandledExceptionInSystemThread+0x18:80131ff8 b801000000 mov eax,0x1kd> 请注意内核调试器已"无法读取图像标题 Floppy.sys 在 fc820000-c0000001 状态"。此消息是正常的因为特定驱动程序标题不是当前在内存中。

检查使用的创建时间 ! 驱动程序

使用! 驱动程序命令列出当前的驱动程序加载到内存中。请记下的日期和时间的驱动程序,他们可能是加载。(在以下示例中的代码大小和数据大小列删除文章的宽度。)kd> !driversBase Code Size Data Size Driver Name Creation Time80100000 Ntoskrnl.exe Fri May 26 18:18:36 199580400000 Hal.dll Thu May 11 13:54:18 199580010000 Atapi.sys Tue May 23 21:01:41 199580013000 Scsiport.sys Fri May 05 23:11:06 199580001000 Atdisk.sys Fri May 05 23:10:40 19958001b000 Scsidisk.sys Fri May 05 23:11:01 199580372000 Fastfat.sys Mon May 22 23:57:13 1995fc820000 Floppy.sys Header Paged Outfc830000 Scsicdrm.sys Wed May 10 21:57:03 1995fc840000 Fs_Rec.sys Header Paged Outfc850000 Null.sys Header Paged Outfc860000 Beep.sys Header Paged Outfc870000 I8042prt.sys Fri May 05 23:10:42 1995fc880000 Mouclass.sys Fri May 05 23:10:45 1995fc890000 Kbdclass.sys Fri May 05 23:10:44 1995fc8b0000 Videoprt.sys Fri May 05 23:10:05 1995fc8a0000 S3.sys Fri May 19 21:18:06 1995fc8c0000 Vga.sys Fri May 05 23:10:10 1995fc8d0000 Msfs.sys Fri May 05 23:11:57 1995fc8e0000 Npfs.sys Fri May 05 23:11:40 1995fc900000 Ndis.sys Mon May 22 20:23:18 1995fc8f0000 El59x.sys Fri Feb 10 16:18:09 1995fc940000 Tdi.sys Fri May 05 23:13:09 1995fc920000 Nbf.sys Mon May 08 15:00:47 1995fc950000 Netbios.sys Fri May 05 23:13:19 1995fc960000 Parport.sys Header Paged Outfc970000 Parallel.sys Header Paged Outfc980000 Serial.sys Fri May 05 23:11:20 1995fc990000 Afd.sys Header Paged Outfc9a0000 Rdr.sys Wed May 17 17:18:16 1995fc9e0000 Srv.sys Wed May 24 21:56:59 1995TOTAL: 1ab460 (1709 kb) 3b7c0 ( 237 kb) ( 0 kb 0 kb)kd> 注意创建的文件,则将编译该文件的日期时间。查看使用文件管理器的 Winnt\System32\Drivers 子文件夹时,此日期是接近实际的文件上的 Date\Time 戳。 如果您订阅 Microsoft 开发人员网络 (MSDN) 或具有 Windows 设备驱动程序工具包 (DDK),Link.exe 工具可以用于确认 Dbg 文件相同的文件时编译驱动程序所创建。"时间日期戳"在下面的示例与上面的输出中匹配"创建时间"的 Netbios.sys。 使用 Link.exe 来检查"的时间日期戳"Dbg 文件的:

链接-转储的头 \symbols\sys\netbios.dbgMicrosoft (R) COFF 二进制文件转储程序版本 3.00.5270 版权所有 (C) Microsoft Corp 1992-1995年。保留所有权利。 转储文件 Netbios.dbg 的

4944 签名 0 标志 14 C 机 (i386) 306 特征2FAAE94F 的时间日期戳星期五 5 月 5 日 23:13:19 1995年

图像的图像 70A0 大小的图像 10000 基本的 8D0B 校验和* * 内容的已删除 * * 如果! 驱动程序命令将生成如下所示的所有行,转储中的重要表已损坏。进一步分析转储的不可能。

无法读取 DosHeader 在 0583002a-状态 00000000 无法读取 DosHeader 在 0587002a-状态 00000000 无法读取 DosHeader 在 0588002a-状态 00000000 无法读取 DosHeader 在 058a002a-状态 00000000 无法读取 DosHeader 在 058c002a-状态00000000

Unassembling 函数

符号文件启用内核调试程序按名称引用函数和全局变量。专色检查几个未组装的函数,以确保它们看起来正确。许多函数都是编译器优化并不一定符合下面的例子。编译器优化函数进行函数名的括号中 FPO 标识。 函数通常开头"推 ebp"或"mov eax,fs [000000000]。"机器语言和体验的基本知识将使另一台用于识别这些函数。

  • 列出已加载的模块 x * !

  • 列出特定模块 (例如,Ntoskrnl.exe) 符号。x nt ! *

  • 选择一个函数,即反汇编不进行优化的编译器。u NT ! _NtUnlockFile

良好的符号

kd> u NT!_NtUnlockFileu NT!_NtUnlockFileNT!_NtUnlockFile:80156bd8 64a100000000     mov     eax,fs:[00000000]80156bde 55               push    ebp80156bdf 8bec             mov     ebp,esp80156be1 6aff             push    0xff80156be3 68200d1080       push    0x80100d2080156be8 68304f1380       push    0x80134f3080156bed 50               push    eax80156bee 64892500000000   mov     fs:[00000000],espkd> 

函数的 unassembly 看起来应该类似上面; 文本但是,unassembly 会发生变化。如果 unassembly 看起来正确,则可以假定符号已正确加载此模块。 下面的 unassembly 开头"jnz NT ! _NTUnlockFile + 0x22。"很明显,在函数的开头将不以跳转指令代码开头。再一次检查符号树。

错误符号

kd> u NT!_NTUnlockFileu NT!_NTUnlockFileNT!_NtUnlockFile:801574a4 7520             jnz     NT!_NtUnlockFile+0x22 (801574c6)801574a6 6a00             push    0x0801574a8 8d45dc           lea     eax,[ebp-0x24]801574ab 50               push    eax801574ac 53               push    ebx801574ad ff356c361480     push    dword ptr [NT!_CcNoDelay+0x4 (8014366c)]801574b3 6a01             push    0x1801574b5 ff7508           push    dword ptr [ebp+0x8] 

服务包符号

有的时间时很难匹配的符号具有特定的安装。在某一时间点,服务可能已添加所需从 Windows 安装光盘复制的文件,在使用 service pack 更新复制文件。请务必更改系统设置,从 Windows 安装光盘中复制文件后重新应用服务包和任何第三方支持磁盘。应该安装相同的顺序应用这些符号。

其他信息

若要查找内核调试方式的系列文章,搜索关键字: debugref。Windbg 2.0.x 符号技术在调试器版本 2.0.x 和更高版本的 Microsoft 调试程序有可以使用的附加符号验证步骤。有关详细信息,请向下列 Microsoft Web 站点:

需要更多帮助?

扩展你的技能
了解培训
抢先获得新功能
加入 Microsoft 内部人员

此信息是否有帮助?

你对翻译质量的满意程度如何?

哪些因素影响了你的体验?

是否还有其他反馈?(可选)

谢谢您的反馈意见!

×