无法获取 ntkrpamp 的本地内核符号以在 WinDbg 中正确加载
我正在尝试调试 WinXP SP3 系统上的驱动程序问题。但是,当我连接到调试器时,我得到:
* 错误:找不到符号文件。默认导出 ntkrpamp.exe 的符号
我的主机是 WinXP x64 SP2。我的调试器版本是 6.11.0001.404 (AMD64)。目标是WinXP x86 SP3。当我运行“vertarget”时,我得到:
Windows XP 内核版本 2600 (Service Pack 3) MP(2 个进程)免费 x86 兼容
产品:WinNt,套件:TerminalServer SingleUserTS
构建者:2600.xpsp_sp3_gdr.100427-1636
我使用“!sym嘈杂”来获得完整的符号加载输出。当我尝试重新加载 nt 模块(未正确加载的模块)时,它会列出它查找 pdb 文件的所有位置。对于正确文件所在的行(我安装了 XP SP3 免费符号),它显示:
DBGHELP: e:\symbols\wxp_sp3_x86_fre\exe\ntkrpamp.pdb - 不匹配的 pdb
这就是它告诉我的全部。它没有说明为什么不匹配。我在这里错过了什么吗?提前致谢。
注意:连接到 Microsoft 的符号服务器不是一个选项。主机在内网,无法与外界连接。
编辑:我能够通过重新安装目标机器来解决问题。我知道目标安装了一些 Windows 更新,我怀疑其中之一导致 ntkrpamp.exe 的符号过时。
I'm trying to debug a driver issue on a WinXP SP3 system. However, when I connect to the debugger I get:
* ERROR: Symbol file could not be found. Defaulted to export symbols for ntkrpamp.exe
My host machine is WinXP x64 SP2. My debugger version is 6.11.0001.404 (AMD64). The target is WinXP x86 SP3. When I run 'vertarget' I get:
Windows XP Kernel Version 2600 (Service Pack 3) MP (2 procs) Free x86 compatible
Product: WinNt, suite: TerminalServer SingleUserTS
Built by: 2600.xpsp_sp3_gdr.100427-1636
I used '!sym noisy' to get full symbol loading output. When I try to reload the nt module (the one that didn't load correctly) it lists all the places it looks for the pdb file. For the line where the correct file is (I installed the XP SP3 free symbols) it says:
DBGHELP: e:\symbols\wxp_sp3_x86_fre\exe\ntkrpamp.pdb - mismatched pdb
This is all it tells me. It doesn't say why it's mismatched. Am I missing something here? Thanks in advance.
NOTE: Connecting to Microsoft's symbol server is not an option. The host machine is on an intranet and cannot be connected to the outside world.
EDIT: I was able to fix the problem by reinstalling the target machine. I know the target had some Windows updates installed and I suspect one of these made the symbols for ntkrpamp.exe go out-of-date.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
调试器使用时间戳和校验和来验证符号。如果您确定您拥有正确的符号,则只需使用
.reload /fi NT
强制加载符号路径中的 PDB。如果您无法从正在调试的计算机访问互联网,您可以随时将二进制文件复制到闪存驱动器,将其带到可以访问互联网的计算机并使用
kd -z ntkrpamp.exe 将二进制文件调试为转储文件。这将允许您使用 Microsoft 的符号服务器。然后,您可以通过闪存驱动器将 PDB 从本地路径复制到您的 Intranet 环境。
The debugger uses timestamps and a checksum to validate the symbols. If you are sure you have the right symbols then just use
.reload /fi NT
to force loading the PDB you have in the symbol path.If you do not have access to the internet form the machine being debugged, you can always copy binary to a flash drive, take it to a machine that does have access to the Internet and use
kd -z ntkrpamp.exe
to debug the binary as a dump file. This will allow you to use Microsoft's symbol server. You can then copy the PDB from the local path to your intranet environment via a flash drive.