2015-08-26 20 views
5

Ho già utilizzato windbg per il debug in modalità utente, ma ho il sospetto che ho fatto qualcosa al mio sistema perché non ricordo di avere un problema usando, ad esempio, il comando di estensione! Heap in precedenza.modulo ntdll non si carica correttamente in windbg, ma perché?

posso vedere chiaramente ntdll è un modulo caricato:

77760000 778e0000 ntdll  (pdb symbols)   C:\Program Files (x86)\Windows Kits\8.1\Debuggers\x86\sym\wntdll.pdb\FA9C48F9C11D4E0894B8970DECD92C972\wntdll.pdb 

0:001> lmvm ntdll 
start end  module name 
77760000 778e0000 ntdll  (pdb symbols)   C:\Program Files  (x86)\Windows Kits\8.1\Debuggers\x86\sym\wntdll.pdb \FA9C48F9C11D4E0894B8970DECD92C972\wntdll.pdb 
    Loaded symbol image file: C:\Windows\SysWOW64\ntdll.dll 
    Image path: C:\Windows\SysWOW64\ntdll.dll 
    Image name: ntdll.dll 
    Timestamp:  Wed Jul 15 13:53:36 2015 (55A69E20) 
    CheckSum:   00142A8B 
    ImageSize:  00180000 
    File version:  6.1.7601.18933 
    Product version: 6.1.7601.18933 
    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:  Microsoft® Windows® Operating System 
    InternalName:  ntdll.dll 
    OriginalFilename: ntdll.dll 
    ProductVersion: 6.1.7601.18933 
    FileVersion:  6.1.7601.18933 (win7sp1_gdr.150715-0600) 
    FileDescription: NT Layer DLL 
    LegalCopyright: © Microsoft Corporation. All rights reserved. 

e

0:001> !chksym ntdll 

C:\Windows\SysWOW64\ntdll.dll 
    Timestamp: 55A69E20 
    SizeOfImage: 180000 
      pdb: wntdll.pdb 
     pdb sig: FA9C48F9-C11D-4E08-94B8-970DECD92C97 
      age: 2 

Loaded pdb is C:\Program Files (x86)\Windows Kits\8.1\Debuggers\x86\sym\wntdll.pdb\FA9C48F9C11D4E0894B8970DECD92C972\wntdll.pdb 

wntdll.pdb 
     pdb sig: FA9C48F9-C11D-4E08-94B8-970DECD92C97 
      age: 2 

MATCH: wntdll.pdb and C:\Windows\SysWOW64\ntdll.dll<code> 

Quando cerco di usare la mia estensione mucchio, ottengo:

0:001> !heap -stat 
************************************************************************* 
***                 *** 
***                 *** 
*** Either you specified an unqualified symbol, or your debugger *** 
*** doesn't have full symbol information. Unqualified symbol  *** 
*** resolution is turned off by default. Please either specify a *** 
*** fully qualified symbol module!symbolname, or enable resolution *** 
*** of unqualified symbols by typing ".symopt- 100". Note that *** 
*** enabling unqualified symbol resolution with network symbol  *** 
*** server shares in the symbol path may cause the debugger to  *** 
*** appear to hang for long periods of time when an incorrect  *** 
*** symbol name is typed or the network symbol server is down.  *** 
***                 *** 
*** For some commands to work properly, your symbol path   *** 
*** must point to .pdb files that have full type information.  *** 
***                 *** 
*** Certain .pdb files (such as the public OS symbols) do not  *** 
*** contain the required information. Contact the group that  *** 
*** provided you with these symbols if you need this command to *** 
*** work.               *** 
***                 *** 
*** Type referenced: ntdll!_PEB         *** 
***                 *** 

.symopt- 100 doesn aiutare sia

e se provo a utilizzare l'estensione sezione critica ottengo un errore simile:

Bad symbols for NTDLL (error 3). Aborting. 

Ho letto questo può verificarsi se si dispone di una mancata corrispondenza tra 32 e 64 bit o se semplicemente non si dispone di simboli correttamente impostato in primo luogo ma ho usato .symfix e posso forzare i miei simboli a ricaricare con .reload /f, sto usando il debugger x86 su un processo x86 o un dump a 32 bit, quindi non vedo come questi problemi sono a giocare.

Ho avviato completamente e disinstallato completamente windbg e ho reinstallato gli strumenti di debug per Windows da MSDN e ho ancora riscontrato lo stesso problema. Sicuramente mi manca qualcosa di ovvio?

+2

sembra esserci un problema con l'installazione dei simboli, alcuni thread nelle liste di windrg di osr parlano poco dei recenti problemi relativi ai simboli, eppure questi report non hanno risposte ufficiali da ms http://www.osronline.com /showthread.cfm?link=269221 – blabb

+0

esegui **! sym rumoroso; .reload/f/v ** e cerca le uscite ntdll. – magicandre1981

+0

@Thomas, sto usando 6.3.9600.17298 X86 – JosephA

risposta

8

MS sta eliminando tutte le informazioni sul tipo negli ultimi PDB di Windows 7. Questo si rompe !heap. Ecco una conversazione Twitter su di esso avviato da Alex Ionescu, un co-autore di "Windows Internals, sesta edizione": https://twitter.com/aionescu/status/634028737458114560

UPDATE: 10/12/2015: possibile soluzione utilizzando lo script python Tipo Theft PPB che copia digitare le informazioni da un PDB a un altro. L'utilizzo sarebbe quello di copiare le informazioni sul tipo da un PDB meno recente con le informazioni sul tipo rimosse in PDB successivi. Questo legame ha tutti i dettagli: http://h30499.www3.hp.com/t5/HP-Security-Research-Blog/PDB-Type-Theft/ba-p/6801065#.Vhv2gPm6fmE

UPDATE: 2015/10/22: Con il giorno di patch di Microsoft (2015/10/13) e KB3088195, i simboli sono di nuovo disponibili. Tuttavia, i simboli per la versione non funzionante non sono stati forniti, quindi può ancora essere utile.

+0

Sembra che Mr. Ionescu sia contrario alla rimozione di tali informazioni . Speriamo che abbia qualche influenza. –

+0

@ThomasWeller Una delle risposte dei tweet dice che è stata esaminata e spero che la MS possa riconsiderare. –

+0

FYI: Ho aggiunto un altro aggiornamento –

1

Sembra che con gli aggiornamenti di Windows distribuiti su 20151013, le informazioni di heap siano nuovamente disponibili.

0:018> !chksym ntdll 

C:\Windows\SysWOW64\ntdll.dll 
Timestamp: 56099FFA 
SizeOfImage: 180000 
     pdb: wntdll.pdb 
    pdb sig: C2B37FDB-B631-4EA7-8A6D-7F51123F151E 
     age: 2 

Loaded pdb is microsoft\wntdll.pdb \C2B37FDBB6314EA78A6D7F51123F151E2\wntdll.pdb 

wntdll.pdb 
    pdb sig: C2B37FDB-B631-4EA7-8A6D-7F51123F151E 
     age: 2 

MATCH: wntdll.pdb and C:\Windows\SysWOW64\ntdll.dll 

e

0:018> lm v m *ntdll* 
start end  module name 
77530000 776b0000 ntdll  (pdb symbols)  microsoft\wntdll.pdb\C2B37FDBB6314EA78A6D7F51123F151E2\wntdll.pdb 
Loaded symbol image file: C:\Windows\SysWOW64\ntdll.dll 
Image path: C:\Windows\SysWOW64\ntdll.dll 
Image name: ntdll.dll 
Timestamp:  Mon Sep 28 22:15:54 2015 (56099FFA) 
CheckSum:   001412F8 
ImageSize:  00180000 
File version:  6.1.7601.23223 
Product version: 6.1.7601.23223 
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:  Microsoft® Windows® Operating System 
InternalName:  ntdll.dll 
OriginalFilename: ntdll.dll 
ProductVersion: 6.1.7601.23223 
FileVersion:  6.1.7601.23223 (win7sp1_ldr.150928-0600) 
FileDescription: NT Layer DLL 
LegalCopyright: © Microsoft Corporation. All rights reserved. 

Potete installare gli aggiornamenti, ricostruire la vostra applicazione e riprovare?

+0

Cosa c'entra la ricostruzione con qualcosa? – SamB

+0

@ SamB: così le firme nel PDB dell'applicazione vengono aggiornate al nuovo set di PDB microsoft. – x29a

+0

Non penso che l'applicazione abbia qualcosa a che fare con ciò che i PDB sono usati per ntdll; I PDB vengono cercati in base alle informazioni dall'immagine PE corrispondente, in questo caso i file ntdll.dll. Quindi, se il file ntdll.dll in questione non ha mai pubblicato un file PDB non valido, non è necessario fare nulla. Se il ntdll.dll in questione * ha * ha pubblicato un PDB non valido ma è stato sostituito sul server dei simboli con un buon PDB, è necessario eliminare tutte le copie memorizzate nella cache del PDB errato che si può avere, che il comando 'lm vm' sopra dovrebbe aiutarti a trovare – SamB

Problemi correlati