!address

L’extension !address affiche des informations sur la mémoire utilisée par le processus cible ou l’ordinateur cible.

Mode Utilisateur

!address Address
!address -summary 
!address [-f:F1,F2,...] {[-o:{csv | tsv | 1}] | [-c:"Command"]}
!address -? | -help

Mode Noyau

!address Address 
!address

Paramètres

Adresse
Affiche uniquement la région de l’espace d’adressage qui contient Address.

-summary
Affiche uniquement les informations de synthèse.

-f:F1, F2, ...
Affiche uniquement les régions spécifiées par les filtres F1, F2, et ainsi de suite.

Les valeurs de filtre suivantes spécifient les régions de mémoire en fonction de la manière dont le processus cible les utilise.

Valeur du filtre Régions de mémoire affichées

VAR

Régions occupées. Ces régions comprennent tous les blocs d’allocation virtuels, le tas SBH, la mémoire des allocateurs personnalisés et toutes les autres régions de l’espace d’adressage qui ne tombent dans aucune autre classification.

Gratuit

Mémoire libre. Cela inclut toute la mémoire qui n’a pas été réservée.

Image

Mémoire qui est mappée à un fichier qui fait partie d’une image exécutable.

Pile

Mémoire utilisée pour les piles de threads.

Teb

Mémoire utilisée pour les blocs d’environnement de threads (TEB).

Peb

Mémoire utilisée pour le bloc d’environnement de processus (PEB).

Segment de mémoire (heap)

Mémoire utilisée pour les tas.

PageHeap

La région de mémoire utilisée pour le tas en page complète.

CSR

Mémoire partagée CSR.

Actx

Mémoire utilisée pour les données de contexte d’activation.

NLS

Mémoire utilisée pour les tables de prise en charge de la langue nationale (NLS).

FileMap

Mémoire utilisée pour les fichiers mappés en mémoire. Ce filtre s’applique uniquement pendant le débogage en direct.

Les valeurs de filtre suivantes spécifient les régions de mémoire par le type de mémoire.

Valeur du filtre Régions de mémoire affichées

MEM_IMAGE

Mémoire qui est mappée à un fichier qui fait partie d’une image exécutable.

MEM_MAPPED

Mémoire qui est mappée à un fichier qui ne fait pas partie d’une image exécutable. Cela inclut la mémoire qui est mappée au fichier d’échange.

MEM_PRIVATE

Mémoire privée. Cette mémoire n’est partagée par aucun autre processus et n’est pas mappée à un fichier.

Les valeurs de filtre suivantes spécifient les régions de mémoire par l’état de la mémoire.

Valeur du filtre Régions de mémoire affichées

MEM_COMMIT

Mémoire allouée.

MEM_FREE

Mémoire libre. Cela inclut toute la mémoire qui n’a pas été réservée.

MEM_RESERVE

Mémoire réservée.

Les valeurs de filtre suivantes spécifient les régions de mémoire par la protection appliquée à la mémoire.

Valeur du filtre Régions de mémoire affichées

PAGE_NOACCESS

Mémoire qui ne peut pas être accédée.

PAGE_READONLY

Mémoire qui ne peut pas être accédée.

PAGE_READWRITE

Mémoire qui est lisible et inscriptible, mais non exécutable.

PAGE_WRITECOPY

Mémoire qui a un comportement de copie à la demande.

PAGE_EXECUTE

Mémoire qui est exécutable, mais pas lisible et non inscriptible.

PAGE_EXECUTE_READ

Mémoire qui est exécutable et lisible mais non inscriptible.

PAGE_EXECUTE_READWRITE

Mémoire qui est exécutable, lisible et inscriptible.

PAGE_EXECUTE_WRITECOPY

Mémoire exécutable et comportement de copie en écriture.

PAGE_GUARD

Mémoire qui agit comme une page de garde.

PAGE_NOCACHE

Mémoire qui n’est pas mise en cache.

PAGE_WRITECOMBINE

Mémoire qui a l’accès de combinaison d’écriture activé.

-o:{csv | tsv | 1}
Affiche la sortie selon l’une des options suivantes.

Option Format de sortie

csv

Affiche la sortie sous forme de valeurs séparées par des virgules.

tsv

Affiche la sortie sous forme de valeurs séparées par des tabulations.

1

Affiche la sortie en format brut. Ce format fonctionne bien lorsque !address est utilisé en entrée pour .foreach.

-c:"Command"
Exécute une commande personnalisée pour chaque région de mémoire. Vous pouvez utiliser les espaces réservés suivants dans votre commande pour représenter les champs de sortie de l’extension !address.

Paramètre substituable Champ Sortie

%1

Adresse de base

2 %

Adresse de fin + 1

3 %

Taille de la région

4 %

Type

5 %

State

%6

Protection

7 %

Utilisation

Par exemple, !address -f:Heap -c:".echo %1 %3 %5" affiche l’adresse de base, la taille et l’état pour chaque région de mémoire de type Heap.

Les guillemets dans la commande doivent être précédés d’un antislash (\"). Par exemple, !address -f:Tas -c:"s -a %1 %2 \"pad\"" recherche chaque région de mémoire de type Heap pour la chaîne « pad ».

Les commandes multiples séparées par des points-virgules ne sont pas prises en charge.

-?
Affiche un texte d’aide minimal pour cette extension dans la Fenêtre de commande du débogueur.

DLL

Ext.dll

Informations supplémentaires

Pour plus d’informations sur l’affichage et la recherche de mémoire, veuillez consulter la rubrique Lecture et écriture de mémoire. Pour des extensions supplémentaires qui affichent les propriétés de la mémoire, veuillez consulter la section !vm (mode noyau) et !vprot (mode utilisateur).

Notes

Sans aucun paramètre, l’extension !address affiche des informations sur l’espace d’adressage entier. La commande !address -summary affiche uniquement le résumé.

En mode noyau, cette extension recherche uniquement la mémoire du noyau, même si vous avez utilisé .process (Définir le contexte de processus) pour spécifier l’espace d’adressage virtuel d’un processus donné. En mode utilisateur, l’extension !address fait toujours référence à la mémoire que le processus cible possède.

En mode utilisateur, !addressAddress affiche les caractéristiques de la région à laquelle appartient l’adresse spécifiée. Sans paramètres, !address affiche les caractéristiques de toutes les régions de mémoire. Ces caractéristiques incluent l’utilisation de la mémoire, le type de mémoire, l’état de la mémoire et la protection de la mémoire. Pour plus d’informations sur la signification de ces informations, consultez les tables précédentes dans la description du paramètre -f.

L’exemple suivant utilise !address pour récupérer des informations sur une région de mémoire mappée à kernel32.dll.

0:000> !address 75831234
Usage:                  Image
Base Address:           75831000
End Address:            758f6000
Region Size:            000c5000
Type:                   01000000MEM_IMAGE
State:                  00001000MEM_COMMIT
Protect:                00000020PAGE_EXECUTE_READ
More info:              lmv m kernel32
More info:              !lmi kernel32
More info:              ln 0x75831234

Cet exemple utilise une valeur Address de 0x75831234. L’affichage indique que cette adresse se trouve dans une région de mémoire qui commence par l’adresse 0x75831000 et se termine par l’adresse 0x758f6000. La région a une Image d’utilisation, un type MEM_IMAGE, un état MEM_COMMIT et une protection PAGE_EXECUTE_READ. (Pour plus d’informations sur la signification de ces valeurs, consultez les tables antérieures.) L’affichage répertorie également trois autres commandes de débogueur que vous pouvez utiliser pour obtenir plus d’informations sur cette adresse mémoire.

Si vous commencez par une adresse et que vous essayez de déterminer des informations à ce sujet, les informations d’utilisation sont fréquemment les plus précieuses. Une fois que vous connaissez l’utilisation, vous pouvez utiliser des extensions supplémentaires pour en savoir plus sur cette mémoire. Par exemple, si l’utilisation est Heap, vous pouvez utiliser l’extension !heap pour en savoir plus.

L’exemple suivant utilise la commande s (Search Memory) pour rechercher chaque région de mémoire de type Image pour la chaîne de caractères larges « Remarque ».

!address /f:Image /c:"s -u %1 %2 \"Note\""

*** Executing: s -u 0xab0000 0xab1000 "Note"
*** Executing: s -u 0xab1000 0xabc000 "Note"
00ab2936  004e 006f 0074 0065 0070 0061 0064 0000  N.o.t.e.p.a.d...
00ab2f86  004e 006f 0074 0065 0070 0061 0064 005c  N.o.t.e.p.a.d.\.
00ab32e4  004e 006f 0074 0065 0070 0061 0064 0000  N.o.t.e.p.a.d...
*** Executing: s -u 0xabc000 0xabd000 "Note"
. . .

En mode noyau, la sortie de !address est similaire à la sortie du mode utilisateur, mais contient moins d’informations. L’exemple suivant montre la sortie en mode noyau.

kd> !address
  804de000 - 00235000                           
 Usage       KernelSpaceUsageImage
          ImageName   ntoskrnl.exe

  80c00000 - 001e1000
          Usage       KernelSpaceUsagePFNDatabase

....

  f85b0000 - 00004000
          Usage       KernelSpaceUsageKernelStack
          KernelStack 817b4da0 : 324.368

 f880d000 - 073d3000
          Usage       KernelSpaceUsageNonPagedPoolExpansion

La signification de « utilisation » est identique au mode utilisateur. « ImageName » indique le module associé à cette adresse. « KernelStack » affiche l’adresse du bloc ETHREAD de ce thread (0x817B4DA0), l’ID de processus (0x324) et l’ID de thread (0x368).