!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.
-résumé
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, !address Address 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).