2011-03-17 19 views
5

मैं Windows Server 2003 SP2 x86 पर बैठे पूर्ण डंप मेमोरी फ़ाइल से ढेर जानकारी को डंप करने का प्रयास कर रहा हूं। डंप 32-बिट मिश्रित (देशी/clr) अनुप्रयोग के लिए बनाया गया था जो Windows Server 2003 SP2 x64 मशीन पर चल रहा था।! ढेर असफल रहा। Ntdll के लिए अमान्य प्रकार की जानकारी! _HEAP_ENTRY

निम्न विंडबग लॉग से मैं समझता हूं कि लोड की गई ntdll.dll छवि गलत है और ntdll.pdb प्रतीकों से मेल नहीं खाती है। मैंने लक्ष्य मशीन से ntdll.dll को स्थान निर्दिष्ट करने का प्रयास किया है लेकिन विंडबग अभी भी दिखाता है कि मॉड्यूल मानक स्थान से लोड किया गया है (c: \ windows \ system32)।

मैंने क्या गलत किया? 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. 

अद्यतन:

मैं अपने अंक में एक छोटा सा आगे ले जाया गया। मैं ग्राहकों की तरफ लाइव प्रक्रिया से जुड़ने में कामयाब रहा और ने ढेर (हीप-एस) की जांच की और मूल रूप से मुझे एक ही परिणाम मिला।


(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 में उल्लेख किया है के लिए इसी तरह की है। पर्यावरण और समस्या एक जैसी प्रतीत होती है लेकिन डीएलएल संस्करण अलग हैं, इसलिए यह मेरे लिए समाधान नहीं है।

मुझे लगता है कि मुझे इस समस्या को माइक्रोसॉफ्ट में बढ़ाना है।

क्या कोई जानता है कि मुझे इस प्रश्न के साथ कहां जाना चाहिए?

उत्तर

2

समाधान आसान लेकिन स्पष्ट नहीं है।

  • मैं wntdll.pdb मेरा की तुलना में थोड़ा बड़ा है जो आवश्यक प्रतीक शामिल होते हैं और आदेश के साथ फिर से लोड पाया .reload/f/मैं Ntdll.dll

  • और मैं windbg 6.11.0001.404 के पिछले निर्माण ले , वर्तमान में 6.12.0002.633! हेप कमांड अभी भी मेरे मामले में काम नहीं करता है।

3

यह तब हो सकता है जब 64 बिट टूल्स के साथ डंप बनाया गया हो। Tess's blog पर अच्छी जानकारी है जो डंप मामलों के कारण का कारण बताती है।

+1

डंप 32 बिट है। मैं इसे विंडबग में 32 बिट मोड में स्विच करने की कोशिश कर रहा हूं।

 0:042> .load wow64exts 0:042> !sw !wow64exts.sw : command invalid on non-64bit target 
शायद यही कारण है (64 बिट्स सिस्टम पर 32 बिट्स डंप बनाया गया) क्यों मैं किसी अन्य स्थान से ntdll.dll लोड नहीं कर सकता। –

+1

फिर यह कुछ और है। आप मॉड्यूल के प्रकार की पुष्टि कर सकते हैं! Lmi (आप बिना lmi का उपयोग कर रहे थे!, यह अलग आदेश है)। ! एलएमआई मशीन प्रकार डंप करेगा, जो या तो I386 या X64 होगा। आपके मामले में आपको उम्मीद करनी चाहिए कि "! Lmi ntdll.dll" I386 प्रिंट करेगा। –

0

यह प्रकार _HEAP_ENTRY तरह लग रहा है 2003 SP2 के pdb में शामिल नहीं है ntdll.dll माइक्रोसॉफ्ट एक हॉटफिक्स http://support.microsoft.com/kb/959207 जारी किया गया है, लेकिन आप एक बाद ntdll संस्करण लगता है।