你目前正处于脱机状态,正在等待 Internet 重新连接

如何验证 Windows 调试符号

针对 Windows XP 的支持已终止

Microsoft 已于 2014 年 4 月 8 日终止了针对 Windows XP 的支持。该更改已影响到您的软件更新和安全选项。 了解这一措施对于您的含义以及如何继续保持受保护状态。

针对 Windows Server 2003 的支持已于 2015 年 7 月 14 日终止。

Microsoft 已于 2015 年 7 月 14 日终止了对于 Windows Server 2003 的支持。该更改已影响到您的软件更新和安全选项。 了解这一措施对于您的含义以及如何继续保持受保护状态。

注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。

点击这里察看该文章的英文版: 148660
概要
在启动内核调试程序之后,必须验证 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>				
注意内核调试器已在 fc820000-状态 c0000001 Floppy.sys 用于读取图像标题无法。因为特定的驱动程序标头不是当前在内存中,此消息是正常的。

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

使用该 ! 驱动程序 在内存中加载到当前列表驱动程序的命令。使记录的日期和驱动程序的时间和它们可能已加载。 (在下面的示例中,代码大小和数据大小列以适合该文章的宽度删除。
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 匹配上面输出中。

若要检查在"时间日期戳"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!_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 安装光盘复制的系统设置更改后重新应用服务包和 $ 第三方支持的任何磁盘。应该与安装相同的顺序应用这些符号。

其他信息

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

Windbg 2.0.x 符号技术

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

警告:本文已自动翻译

属性

文章 ID:148660 - 上次审阅时间:03/04/2009 23:25:04 - 修订版本: 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
反馈