!堆失败。 ntdll!_HEAP_ENTRY 的类型信息无效

发布于 2024-10-24 07:49:55 字数 4882 浏览 3 评论 0原文

我正在尝试从 Windows Server 2003 SP2 x86 上的完全转储内存文件转储堆信息。转储是为在 Windows Server 2003 SP2 x64 计算机上运行的 32 位混合(本机/clr)应用程序创建的。

从以下 Windbg 日志中,我了解到加载的 ntdll.dll 图像不正确,并且与 ntdll.pdb 符号不对应。我尝试从目标计算机指定 ntdll.dll 的位置,但 Windbg 仍然显示该模块是从标准位置 (c:\windows\system32) 加载的。

我做错了什么?如何强制windbg加载正确版本的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),基本上我得到了相同的结果。


(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'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?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

原来分手还会想你 2024-10-31 07:49:55

如果转储是使用 64 位工具创建的,则可能会发生这种情况。 Tess 的博客,解释了转储位数很重要的原因。

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.

许一世地老天荒 2024-10-31 07:49:55

解决方案似乎很简单,但并不明显。

  • 我发现一个比我的稍大的 wntdll.pdb,其中包含所需的符号,并使用命令 .reload /f /i ntdll.dll 重新加载它

  • 重新加载它,我采用了 Windbg 6.11.0001.404 的上一个版本,当前版本为 6.12.0002.633 < code>!heap 命令在我的情况下仍然不起作用。

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.

浅听莫相离 2024-10-31 07:49:55

2003 SP2 ntdll.dll 的 pdb 中似乎不包含 _HEAP_ENTRY 类型
Microsoft 发布了一个修补程序 http://support.microsoft.com/kb/959207,但您似乎有更高版本的 ntdll。

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文