如何验证 Windows 调试符号

文章翻译 文章翻译
文章编号: 148660 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

概要

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

更多信息

本文假定内核调试程序正在运行和已加载了一个 Memory.dmp 文件或连接到远程计算机。未完全记录显示的命令,并显示仅从输出的摘录。

文章目录

  • 正在加载内核调试器
  • 检查与创建时间! 驱动程序
  • 使用 Link.exe 检查创建时间
  • unassembling 函数
  • 服务包符号

正在加载内核调试器

内核调试器的正常负载将显示下列提示之一:
kd > 单处理器系统

0: kd > 多处理器系统
下面显示该提示指示 Ntoskrnl.exe 文件的符号文件不正确。请检查以确保适当的多处理器或单处理器内核和 HAL 复制到符号树。

示例:
Symbol search path is: C:\symbols
kd: crash dump initialized [c:\dump\memory.dmp]
could not determine the current processor, using zero
Kernel Version 1057 Free loaded @ 0x80100000
Bugcheck 0000001e : c0000005 80151d5b 00000000 00000001
*** Contents Deleted ***
16kd>
				
内核调试程序时加载 Memory.dmp 文件的内核版本,以及处理器数显示在前几行。 确认处理器计数与相应的内核和 HAL。将显示驱动程序的符号信息,如加载或推迟任何符号。

示例负载:
Symbol search path is: C:\symbols
kd: crash dump initialized [c:\dump\memory.dmp]
Kernel Version 1057 Free loaded @ 0x80100000
Bugcheck 0000001e : c0000005 80151d5b 00000000 00000001
re-loading all kernel symbols
KD: unloading symbols for "ntoskrnl.exe"
KD: deferring symbol load for "ntoskrnl.exe" at 80100000
KD: 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 fc810000
KD: deferring symbol load for "diskdump.sys" at fc800000
KD: deferring symbol load for "hal.dll" at 80400000
KD: deferring symbol load for "atapi.sys" at 80010000
KD: deferring symbol load for "SCSIPORT.SYS" at 80013000
KD: deferring symbol load for "Atdisk.sys" at 80001000
KD: deferring symbol load for "Scsidisk.sys" at 8001b000
KD: deferring symbol load for "Fastfat.sys" at 80372000
Unable to read image header for Floppy.SYS at fc820000 - status c0000001
*** Contents Deleted ***
KD: deferring symbol load for "srv.sys" at fc9e0000
KD: deferring symbol load for "ntdll.dll" at 77f80000
finished re-loading all kernel symbols
NT!_PspUnhandledExceptionInSystemThread+0x18:
80131ff8 b801000000       mov     eax,0x1
kd>
				
注意内核调试器已在 fc820000-状态 c0000001 Floppy.sys 用于读取图像标题无法。因为特定的驱动程序标头不是当前在内存中,此消息是正常的。

检查与创建时间! 驱动程序

使用该 ! 驱动程序 在内存中加载到当前列表驱动程序的命令。使记录的日期和驱动程序的时间和它们可能已加载。 (在下面的示例中,代码大小和数据大小列以适合该文章的宽度删除。
kd> !drivers
Base       Code Size Data Size  Driver Name        Creation Time
80100000                       Ntoskrnl.exe   Fri May 26 18:18:36 1995
80400000                            Hal.dll   Thu May 11 13:54:18 1995
80010000                          Atapi.sys   Tue May 23 21:01:41 1995
80013000                       Scsiport.sys   Fri May 05 23:11:06 1995
80001000                         Atdisk.sys   Fri May 05 23:10:40 1995
8001b000                       Scsidisk.sys   Fri May 05 23:11:01 1995
80372000                        Fastfat.sys   Mon May 22 23:57:13 1995
fc820000                         Floppy.sys   Header Paged Out
fc830000                       Scsicdrm.sys   Wed May 10 21:57:03 1995
fc840000                         Fs_Rec.sys   Header Paged Out
fc850000                           Null.sys   Header Paged Out
fc860000                           Beep.sys   Header Paged Out
fc870000                       I8042prt.sys   Fri May 05 23:10:42 1995
fc880000                       Mouclass.sys   Fri May 05 23:10:45 1995
fc890000                       Kbdclass.sys   Fri May 05 23:10:44 1995
fc8b0000                       Videoprt.sys   Fri May 05 23:10:05 1995
fc8a0000                             S3.sys   Fri May 19 21:18:06 1995
fc8c0000                            Vga.sys   Fri May 05 23:10:10 1995
fc8d0000                           Msfs.sys   Fri May 05 23:11:57 1995
fc8e0000                           Npfs.sys   Fri May 05 23:11:40 1995
fc900000                           Ndis.sys   Mon May 22 20:23:18 1995
fc8f0000                          El59x.sys   Fri Feb 10 16:18:09 1995
fc940000                            Tdi.sys   Fri May 05 23:13:09 1995
fc920000                            Nbf.sys   Mon May 08 15:00:47 1995
fc950000                        Netbios.sys   Fri May 05 23:13:19 1995
fc960000                        Parport.sys   Header Paged Out
fc970000                       Parallel.sys   Header Paged Out
fc980000                         Serial.sys   Fri May 05 23:11:20 1995
fc990000                            Afd.sys   Header Paged Out
fc9a0000                            Rdr.sys   Wed May 17 17:18:16 1995
fc9e0000                            Srv.sys   Wed May 24 21:56:59 1995
TOTAL:   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 匹配上面输出中。

若要检查在"时间日期戳"Dbg 文件的使用 Link.exe:
LINK 转储的标头 \symbols\sys\netbios.dbg
Microsoft (R) COFF 二进制文件转储程序版本 3.00.5270
版权所有 (C) Microsoft 公司 1992年 1995年。保留的所有权利。

转储文件 Netbios.dbg 的
4944 签名
0 标志
14 C 计算机 (i386)
306 特征
2FAAE94F 时间日期戳周五 5 月 05 23: 13: 19 1995年
图像的 8D0B 校验和

图像的 10000 基

70A0 图像的大小
** 已删除的内容 **

如果该 ! 驱动程序 命令生成如下所示的任何行、 在转储中的一个重要表已损坏。转储的进一步的分析可能是不可能的。
无法在 0583002a-状态中读取 DosHeader 00000000
无法读取 DosHeader 在 0587002a-状态 00000000
无法读取 DosHeader 在 0588002a-状态 00000000
无法读取 DosHeader 在 058a002a-状态 00000000
无法读取 DosHeader 在 058c002a-状态 00000000

unassembling 函数

符号文件启用内核调试程序按名称引用函数和全局变量。点检查以确保它们看起来正确 unassembled 函数的两个。许多功能是编译器优化,并不一定符合下面的示例。优化的编译器函数在函数名的括号中 FPO 由标识。

函数通常开头"推 ebp"或"mov eax,fs [000000000]"机器语言和经验的基本知识将启用一种能够识别这些函数。
  • 列出已加载的模块
    x *!
  • 列出 (例如 Ntoskrnl.exe) 的特定模块的符号。
    x nt ! *
  • 选择一个函数的反汇编编译器优化。
    u NT! _NtUnlockFile

良好的符号

kd> u NT!_NtUnlockFile
u NT!_NtUnlockFile
NT!_NtUnlockFile:
80156bd8 64a100000000     mov     eax,fs:[00000000]
80156bde 55               push    ebp
80156bdf 8bec             mov     ebp,esp
80156be1 6aff             push    0xff
80156be3 68200d1080       push    0x80100d20
80156be8 68304f1380       push    0x80134f30
80156bed 50               push    eax
80156bee 64892500000000   mov     fs:[00000000],esp
kd>
				
函数的 unassembly 看起来应类似于上面的文本,但是,此 unassembly 对其进行更改。如果该 unassembly 看上去正确,您可以假设该符号已正确加载此模块。

以下 unassembly 开头"jnz NT! _NTUnlockFile + 0x22" 显然,函数的开头不会以跳转指令代码开头。再一次检查符号树。

不正确的符号

kd> u NT!_NTUnlockFile
u NT!_NTUnlockFile
NT!_NtUnlockFile:
801574a4 7520             jnz     NT!_NtUnlockFile+0x22 (801574c6)
801574a6 6a00             push    0x0
801574a8 8d45dc           lea     eax,[ebp-0x24]
801574ab 50               push    eax
801574ac 53               push    ebx
801574ad ff356c361480     push    dword ptr [NT!_CcNoDelay+0x4 (8014366c)]
801574b3 6a01             push    0x1
801574b5 ff7508           push    dword ptr [ebp+0x8]
				

服务包符号

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

其他信息

若要内核调试 How To 文章的一系列搜索的关键字: debugref。

Windbg 2.0.x 符号技术

在调试器版本 2.0.x 和更高版本的 Microsoft 调试器没有可用于其他符号验证步骤。有关详细的信息,请参阅以下 Microsoft 网站来:
Drivers Development Kit

属性

文章编号: 148660 - 最后修改: 2009年3月4日 - 修订: 5.0
这篇文章中的信息适用于:
  • Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Professional Edition
  • Microsoft Windows 2000 Datacenter Server
  • Microsoft Windows NT Workstation 3.5
  • Microsoft Windows NT Workstation 3.51
  • Microsoft Windows NT Server 3.5
  • Microsoft Windows NT Server 3.51
  • Windows Server 2008 for Itanium-Based Systems
  • Windows Server 2008 R2 Datacenter
  • Windows Server 2008 R2 Enterprise
  • Windows Server 2008 R2 Standard
  • Windows Server 2008 Datacenter
  • Windows Server 2008 Enterprise
  • Windows Server 2008 Standard
  • Microsoft Windows Server 2003 R2 Datacenter Edition (32-Bit x86)
  • Microsoft Windows Server 2003 R2 Datacenter Edition (64-Bit x86)
  • Microsoft Windows Server 2003 R2 Enterprise Edition (32-Bit x86)
  • Microsoft Windows Server 2003 R2 Enterprise Edition (64-Bit x86)
  • Microsoft Windows Server 2003 R2 Standard Edition (32-bit x86)
  • Microsoft Windows Server 2003 R2 Standard Edition (64-Bit x86)
  • Microsoft Windows Server 2003 Datacenter Edition
  • Microsoft Windows Server 2003, Datacenter Edition for Itanium-Based Systems
  • Microsoft Windows Server 2003, Datacenter x64 Edition
  • Microsoft Windows Server 2003, Enterprise x64 Edition
  • Microsoft Windows Server 2003 Enterprise Edition
  • Microsoft Windows Server 2003, Enterprise Edition for Itanium-based Systems
  • Microsoft Windows Server 2003, Standard x64 Edition
  • Microsoft Windows Server 2003 Standard Edition
  • Microsoft Windows Small Business Server 2003 R2 Premium Edition
  • Microsoft Windows Small Business Server 2003 R2 Standard Edition
  • Microsoft Windows Small Business Server 2003, Premium Edition Service Pack 1 (SP1)
  • Microsoft Windows Small Business Server 2003 Standard Edition
  • Windows Essential Business Server 2008
  • Microsoft Windows XP 64-Bit Edition Version 2002
  • Microsoft Windows XP 64-Bit Edition Version 2003
  • Microsoft Windows XP Home Edition
  • Microsoft Windows XP Home Edition N
  • Microsoft Windows XP Professional Edition
  • Microsoft Windows XP Professional 64-Bit Edition (Itanium)
  • Microsoft Windows XP Professional 64-Bit Edition (Itanium) 2003
  • Microsoft Windows XP Professional N
  • Microsoft Windows XP Professional x64 Edition
  • Windows Vista Enterprise 64-bit edition
  • Windows Vista Home Basic 64-bit edition
  • Windows Vista Home Premium 64-bit edition
  • Windows Vista Ultimate 64-bit edition
  • Windows 7 Beta
  • Windows Vista Business
  • Windows Vista Business 64-bit edition
  • Windows Vista Business N
  • Windows Vista Business N 64-bit Edition
  • Windows Vista Enterprise
  • Windows Vista Home Basic
  • Windows Vista Home Basic N
  • Windows Vista Home Basic N 64-bit Edition
  • Windows Vista Home Premium
  • Windows Vista Ultimate
关键字:?
kbmt kbinfo KB148660 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 148660
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com