Accès à la mémoire par adresse virtuelle
Pour accéder aux adresses mémoire ou aux plages d’adresses, vous pouvez utiliser plusieurs commandes. Visual Studio et WinDbg fournissent des éléments d’interface utilisateur (ainsi que des commandes) que vous pouvez utiliser pour afficher et modifier la mémoire. Pour plus d’informations, consultez Affichage et modification de la mémoire dans WinDbg (classique).
Les commandes suivantes peuvent lire ou écrire de la mémoire dans différents formats. Ces formats incluent des octets hexadécimaux, des mots (mots, mots doubles et quatre mots), des entiers (nombres entiers courts, longs et quad et entiers non signés), des nombres à virgule flottante (10 octets, 16 octets, 32 octets et 64 octets réels) et des caractères ASCII.
La commande d* (Afficher la mémoire) affiche le contenu d’une adresse ou d’une plage mémoire spécifiée.
La commande e* (Enter Values) écrit une valeur dans l’adresse mémoire spécifiée.
Vous pouvez utiliser les commandes suivantes pour gérer des types de données plus spécialisés :
La commande dt (type d’affichage) recherche divers types de données et affiche les structures de données qui ont été créées par l’application en cours de débogage. Cette commande est très polyvalente et comporte de nombreuses variantes et options.
La commande ds, dS (Display String) affiche une structure de données STRING, ANSI_STRING ou UNICODE_STRING.
La commande dl (Afficher la liste liée) trace et affiche une liste liée.
La commande d*s (Afficher les mots et les symboles) recherche les mots doubles ou les quatre mots susceptibles de contenir des informations sur les symboles, puis affiche les données et les informations de symbole.
La commande d’extension !address affiche des informations sur les propriétés de la mémoire qui se trouve à une adresse spécifique.
Vous pouvez utiliser les commandes suivantes pour manipuler des plages de mémoire :
La commande m (Déplacer la mémoire) déplace le contenu d’une plage de mémoire vers une autre.
La commande f (Remplissage de la mémoire) écrit un modèle dans une plage de mémoire, en le répétant jusqu’à ce que la plage soit pleine.
La commande c (Comparer la mémoire) compare le contenu de deux plages de mémoire.
La commande s (Rechercher en mémoire) recherche un modèle spécifié dans une plage de mémoire ou recherche les caractères ASCII ou Unicode qui existent dans une plage de mémoire.
La commande .holdmem (conservation et comparaison de la mémoire) compare une plage de mémoire à une autre.
Dans la plupart des cas, ces commandes interprètent leurs paramètres dans le radix actuel. Par conséquent, vous devez ajouter 0x avant les adresses hexadécimales si le radix actuel n’est pas 16. Toutefois, la sortie d’affichage de ces commandes est généralement au format hexadécimal, quel que soit le radix actuel. (Pour plus d’informations sur la sortie, consultez les rubriques de commande individuelles.) La fenêtre Mémoire affiche les entiers et les nombres réels au format décimal et affiche d’autres formats au format hexadécimal.
Pour modifier le radix par défaut, utilisez la commande n (Définir la base du nombre). Pour convertir rapidement des nombres d’une base à une autre, utilisez le ? (Évaluer l’expression) ou la commande .formats (Afficher les formats de nombre).
Lorsque vous effectuez un débogage en mode utilisateur, la signification des adresses virtuelles est déterminée par le processus actuel. Lorsque vous effectuez un débogage en mode noyau, la signification des adresses virtuelles peut être contrôlée par le débogueur. Pour plus d’informations, consultez Contexte de processus.