!heap failed. Invalid type information for ntdll!_HEAP_ENTRY

旧街凉风 提交于 2020-01-03 11:02:50

问题


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.

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).

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.

UPDATE:

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

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?


回答1:


This could happen if dump was created with 64 bit tools. There is good information on Tess's blog that explains the reason why bitness of the dump matters.




回答2:


The solution appears to be easy but not obvious.

  • I found a wntdll.pdb slightly bigger than mine which contains required symbols and reloaded it with command .reload /f /i ntdll.dll

  • 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.




回答3:


It looks like the type _HEAP_ENTRY is not included in the pdb of 2003 SP2 ntdll.dll Microsoft released a hotfix http://support.microsoft.com/kb/959207, but you seem to have a later ntdll version.



来源:https://stackoverflow.com/questions/5335202/heap-failed-invalid-type-information-for-ntdll-heap-entry

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!