2009-10-28 6 views
0

J'étudie ce qui prend beaucoup de mémoire dans mon application. En utilisant la commande! DumpObj, je peux contourner les objets gérés. Mais comment puis-je faire l'équivalent pour les objets natifs? Par exemple, cet objet .NET a un pointeur vers le code natif. Je suis coincé ici ... comment puis-je faire l'équivalent de! DumpObj d'ici? J'ai toute la source et les symboles.Comment faire pour marcher un objet natif dans WinDbg?

0:006> !DumpObj 0000000006222a50 
Name: Beriliun.GS.Internal.Signer 
MethodTable: 000007ff00658548 
EEClass: 000007ff00734170 
Size: 24(0x18) bytes 
(d:\GS\bin\debug\LIBXT.dll) 
Fields: 
       MT Field Offset     Type VT  Attr   Value Name 
000007fef02f8448 4000647  8     PTR 0 instance 000000002d7621e0 pSigner 
0:006> !DumpObj 000000002d7621e0 
<Note: this object has an invalid CLASS field> 
Invalid object 

Répondre

1

Vous pouvez vider l'objet par exécutant la commande suivante:

!object address. 

De plus, l'en-tête de l'objet peut également être exporté. L'en-tête de l'objet est toujours situé à 18h octets avant l'objet en mémoire. Il peut être jeté avec la commande suivante

!dt nt!_object_header address-18h 

Pour déterminer le type que vous voudrez peut-être, en plus de jeter également le type d'objet. Cela peut être réalisé avec la commande suivante.

!dt nt!_object_type address-of-type 

L'adresse de type est imprimé en tant que partie de la décharge de l'en-tête d'objet. Le nom de champ correspondant est Type.

2

Le d * commande devrait vous donner le contenu de la mémoire d

2

module dt! Typedef adr

par exemple, dt MyModule! MyClass 0x12345678

Questions connexes