!heap失败。 ntdll的类型信息无效!_HEAP_ENTRY [英] !heap failed. Invalid type information for ntdll!_HEAP_ENTRY
问题描述
我正在尝试从Windows Server 2003 SP2 x86上的完整转储内存文件中转储堆信息。转储是为在Windows Server 2003 SP2 x64计算机上运行的32位混合(本机/ clr)应用程序创建的。
I'm trying to dump heap information from full dump memory file sitting on Windows Server 2003 SP2 x86. Dump was created for 32-bit mixed (native/clr) application which was running on Windows Server 2003 SP2 x64 machine.
从下面的windbg日志中,我了解到加载的ntdll.dll映像不正确,并且与ntdll.pdb符号不对应。我尝试从目标计算机指定ntdll.dll的位置,但是windbg仍显示模块是从标准位置(c:\windows\system32)加载的。
From the following windbg log I understand that loaded ntdll.dll image is incorrect and does not correspond to ntdll.pdb symbols. I have tried to specify the location to ntdll.dll from the target machine but windbg still shows that the module is loaded from the standard location (c:\windows\system32).
我做错了什么?如何强制windbg加载 ntdll
的正确版本?
What did I do wrong? How to force windbg to load correct version of ntdll
?
Microsoft (R) Windows Debugger Version 6.11.0001.404 X86
Copyright (c) Microsoft Corporation. All rights reserved.
[ ... skipped ... ]
0:042> vertarget
Windows Server 2003 Version 3790 (Service Pack 2) MP (4 procs) Free x86 compatible
Product: Server, suite: TerminalServer SingleUserTS
kernel32.dll version: 5.2.3790.4480 (srv03_sp2_gdr.090321-1244)
Machine Name:
Debug session time: Wed Mar 16 16:36:10.000 2011 (GMT-5)
System Uptime: 17 days 10:34:26.068
Process Uptime: 1 days 15:19:14.000
Kernel time: 0 days 1:24:01.000
User time: 0 days 22:07:58.000
0:042> .sympath
Symbol search path is: C:\mscordacwks\v2.0.50727.3615;C:\__exe;SRV*C\Symbols*http://referencesource.microsoft.com/symbols;SRV*c:\Symbols*http://msdl.microsoft.com/download/symbols;SRV*C:\Symbols*http://source.msdn.microsoft.com/symbols
0:042> .exepath
Executable image search path is: C:\__exe;C:\__target\Windows\SysWOW64;
0:042> .reload
[ ... skipped ... ]
0:042> .reload /u ntdll.dll
Unloaded ntdll.dll
0:042> .reload /v /f ntdll.dll
AddImage: C:\WINDOWS\system32\ntdll.dll // why is it still c:\windows\system32
DllBase = 7d600000
Size = 000f0000
Checksum = 000c371a
TimeDateStamp = 4cc1831e
0:042> lm
[ ... skipped ... ]
7d600000 7d6f0000 ntdll (pdb symbols) c:\symbols\wntdll.pdb\9ED8E09C6723448380648C4456726AEF2\wntdll.pdb
0:042> !heap
*************************************************************************
*** Your debugger is not using the correct symbols ***
[ ... skipped ... ]
*** Type referenced: ntdll!_HEAP_ENTRY ***
*************************************************************************
Invalid type information
0:042> lmi vm ntdll
start end module name
7d600000 7d6f0000 ntdll (pdb symbols) ntdll.dll
Symbol file: c:\symbols\wntdll.pdb\9ED8E09C6723448380648C4456726AEF2\wntdll.pdb
Image path: C:\WINDOWS\system32\ntdll.dll
Image name: ntdll.dll
Timestamp: Fri Oct 22 07:27:10 2010 (4CC1831E)
CheckSum: 000C371A
ImageSize: 000F0000
File version: 5.2.3790.4789 // this is correct and
Product version: 5.2.3790.4789 // does correspond to target computer
File flags: 0 (Mask 3F)
File OS: 40004 NT Win32
File type: 2.0 Dll
File date: 00000000.00000000
Translations: 0409.04b0
CompanyName: Microsoft Corporation
ProductName: MicrosoftR WindowsR Operating System
InternalName: ntdll.dll
OriginalFilename: ntdll.dll
ProductVersion: 5.2.3790.4789
FileVersion: 5.2.3790.4789 (srv03_sp2_gdr.101019-0340)
FileDescription: NT Layer DLL
LegalCopyright: c Microsoft Corporation. All rights reserved.
更新:
我移动了一点在我的问题上更进一步。我设法连接到客户方的实时流程,并尝试
在那儿调查堆(堆-s),基本上我得到了相同的结果。
I moved a little bit further in my issue. I managed to connect to the live process on the customers side and tried to investigate heap (heap -s) there and basically I got the same result.
(1520.7c4): Wake debugger - code 80000007 (first chance)
eax=00000000 ebx=00327d50 ecx=00000000 edx=00000000 esi=0030b428 edi=002debe4
eip=7d61c876 esp=002df008 ebp=002df06c iopl=0 nv up ei pl nz na po nc
cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000202
*** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\WINDOWS\system32\ntdll.dll -
ntdll!ZwReadFile+0x15:
7d61c876 c22400 ret 24h
0:000> !heap -s
*************************************************************************
*** Your debugger is not using the correct symbols ***
*** [...skipped...] ***
*** Type referenced: ntdll!_HEAP_ENTRY ***
*************************************************************************
Invalid type information
0:000> .reload
Reloading current modules
................................................................
....................................
0:000> !heap -s
*************************************************************************
*** Your debugger is not using the correct symbols ***
*** [...skipped...] ***
*** Type referenced: ntdll!_HEAP_ENTRY ***
*************************************************************************
Invalid type information
我认为我有一个与本文中提到的问题类似的问题 http://support.microsoft.com/kb/959207 。
环境和问题似乎相同,但dll版本不同,所以它不是我的解决方案。
I think I have a problem similar to one mentioned in this article http://support.microsoft.com/kb/959207. Environment and problem seem to be the same but dll versions are different, so it is not the solution for me.
我认为我必须解决这个问题微软。
I think I have to escalate this problem to Microsoft.
有人知道我该去哪里吗?
Does anybody know where I should go with this question?
推荐答案
解决方案似乎很简单,但并不明显。
The solution appears to be easy but not obvious.
-
我发现一个wntdll.pdb略大于我的wntdll.pdb,其中包含必需的符号,并用命令
重新加载.reload / f / i ntdll.dll
,在当前版本中,我采用的是上一个版本的windbg 6.11.0001.404。 6.12.0002.633 !heap
命令在我的情况下仍然不起作用。
and I take the previous build of windbg 6.11.0001.404, in the current one 6.12.0002.633 !heap
command still does not work in my case.
这篇关于!heap失败。 ntdll的类型信息无效!_HEAP_ENTRY的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!