Share via


s (Recherche de mémoire)

La commande s recherche dans la mémoire pour trouver un modèle d’octet spécifique.

Ne confondez pas cette commande avec ~s (Modifier le processeur actuel),~s (Définir le thread actuel), |s (Définir le processus actuel)ou ||commandes s (Définir le système actuel).

s [-[[Flags]Type]] Range Pattern 
s -[[Flags]]v Range Object 
s -[[Flags]]sa Range 
s -[[Flags]]su Range 

Paramètres

[Indicateurs]
Spécifie une ou plusieurs options de recherche. Chaque indicateur est une seule lettre. Vous devez placer les indicateurs dans un seul jeu de crochets ([]). Vous ne pouvez pas ajouter d’espaces entre crochets, sauf entre n ou l et son argument. Par exemple, si vous souhaitez spécifier les options s et w , utilisez la commande s -[sw]Type Range Pattern.

Vous pouvez spécifier un ou plusieurs des indicateurs suivants :

s
Enregistre tous les résultats de la recherche actuelle. Vous pouvez utiliser ces résultats pour répéter la recherche ultérieurement.

R
Limite la recherche actuelle aux résultats de la dernière recherche enregistrée. Vous ne pouvez pas utiliser les indicateurs s et r dans la même commande. Lorsque vous utilisez r, la valeur de Range est ignorée et le débogueur recherche uniquement les accès enregistrés par la commande s précédente.

nHits
Spécifie le nombre d’accès à enregistrer lorsque vous utilisez l’indicateur s . La valeur par défaut est 1 024 accès. Si vous utilisez n avec d’autres indicateurs, n doit être le dernier indicateur, suivi de son argument Hits . L’espace entre n et Les correspondances est facultatif, mais vous ne pouvez pas ajouter d’autres espaces entre crochets. Si une recherche ultérieure qui utilise l’indicateur s détecte plus que le nombre spécifié d’accès, le message d’erreur Dépassement de capacité s’affiche pour vous avertir que tous les accès ne sont pas enregistrés.

lLongueur
Entraîne une recherche de chaînes ASCII ou Unicode arbitraires pour renvoyer uniquement des chaînes dont la longueur est au moins de caractères de longueur . La longueur par défaut est 3. Cette valeur affecte uniquement les recherches qui utilisent les indicateurs -sa ou -su .

W
Recherche uniquement les régions de mémoire accessible en écriture. Vous devez placer le « w » entre crochets.


Affiche uniquement les adresses des correspondances de recherche dans la sortie de recherche. Cette option est utile si vous utilisez le jeton .foreach pour diriger la sortie de la commande vers l’entrée d’une autre commande.

Type
Spécifie le type de mémoire à rechercher. Ajoutez un trait d’union (-) devant Type . Vous pouvez utiliser l’une des valeurs type suivantes.

Type Description

b

Octet (8 bits)

w

WORD (16 bits)

d

DWORD (32 bits)

Q

QWORD (64 bits)

a

Chaîne ASCII (pas nécessairement une chaîne terminée par null)

u

Chaîne Unicode (pas nécessairement une chaîne terminée par null)

Si vous omettez Type, les valeurs d’octets sont utilisées. Toutefois, si vous utilisez des indicateurs, vous ne pouvez pas omettre Type.

sa
Recherche toute mémoire contenant des chaînes ASCII imprimables. Utilisez l’indicateur Longueurl pour spécifier une longueur minimale de ces chaînes. La longueur minimale par défaut est de 3 caractères.

su
Recherche toute mémoire contenant des chaînes Unicode imprimables. Utilisez l’indicateur Longueurl pour spécifier une longueur minimale de ces chaînes. La longueur minimale par défaut est de 3 caractères.

Gamme
Spécifie la zone de mémoire à rechercher. Cette plage ne peut pas dépasser 256 Mo, sauf si vous utilisez la syntaxe L ? . Pour plus d’informations sur cette syntaxe, consultez Syntaxe d’adresse et de plage d’adresses.

Modèle
Spécifie une ou plusieurs valeurs à rechercher. Par défaut, ces valeurs sont des valeurs d’octets. Vous pouvez spécifier différents types de mémoire dans Type. Si vous spécifiez une valeur WORD, DWORD ou QWORD, selon les autres options sélectionnées, vous devrez peut-être placer le modèle de recherche entre guillemets simples (par exemple, « H »).

0:000> s -d @rsp L1000000 'H'  
0000003f`ff07ec00  00000048 00000000 500c0163 00000000  H.......c..P....
0000003f`ff07ec50  00000048 00000000 00000080 00000000  H...............
0000003f`ff07efc0  00000048 00000000 400c0060 00000000  H.......`..@....

Si vous spécifiez une chaîne, à l’aide du type ascii, placez-la entre guillemets doubles (par exemple, « B7 »).

0:000> s -a @rsp L10000000 "B7"  
0000003f`ff07ef0a  42 37 ff 7f 00 00 90 38-4e c2 6c 01 00 00 7d 26  B7.....8N.l...}&
0000003f`ff0ff322  42 37 ff 7f 00 00 f8 5d-42 37 ff 7f 00 00 20 41  B7.....]B7.... A
0000003f`ff0ff32a  42 37 ff 7f 00 00 20 41-42 37 ff 7f 00 00 98 59  B7.... AB7.....Y

-C
Recherche des objets du même type que l’objet spécifié.

Objet
Spécifie l’adresse d’un objet ou l’adresse d’un pointeur vers un objet . Le débogueur recherche ensuite les objets du même type que l’objet spécifié par Object .

Environnement

Élément Description
Modes Mode utilisateur, mode noyau
Targets Vidage en direct sur incident
Plateformes Tous

Informations supplémentaires

Pour plus d’informations sur la manipulation de la mémoire et une description d’autres commandes liées à la mémoire, consultez Lecture et écriture de la mémoire.

Remarques

Si le débogueur trouve le modèle d’octets que vous spécifiez, le débogueur affiche la première adresse mémoire dans la zone de mémoire plage où le modèle a été trouvé. Le débogueur affiche un extrait de mémoire qui commence à cet emplacement dans un format qui correspond au type de mémoire Type spécifié. Si Type est un ou u, le contenu de la mémoire et les caractères ASCII ou Unicode correspondants s’affichent.

Vous devez spécifier le paramètre Pattern sous la forme d’une série d’octets, sauf si vous spécifiez une valeur type différente. Vous pouvez entrer des valeurs d’octet sous forme de caractères numériques ou ASCII :

  • Les valeurs numériques sont interprétées comme des nombres dans le radix actuel (16, 10 ou 8). Pour modifier le radix par défaut, utilisez la commande n (Définir la base du nombre). Vous pouvez remplacer le radix par défaut en spécifiant le préfixe 0x (hexadécimal), le préfixe 0n (décimal), le préfixe 0t (octal) ou le préfixe 0y (binaire). Note Le radix par défaut se comporte différemment lorsque vous utilisez des expressions C++. Pour plus d’informations sur ces expressions et le radix, consultez Évaluation des expressions.

  • Vous devez placer les caractères ASCII entre guillemets simples. Vous ne pouvez pas utiliser les caractères d’échappement de style C (tels que « \0 » ou « \n »).

Si vous spécifiez plusieurs octets, vous devez les séparer par des espaces.

Les commandes s-a et s-u recherchent respectivement des chaînes ASCII et Unicode spécifiées. Ces chaînes ne doivent pas être terminées par un caractère Null.

Les commandes s-sa et s-su recherchent des chaînes ASCII et Unicode non spécifiées. Celles-ci sont utiles si vous vérifiez une plage de mémoire pour voir si elle contient des caractères imprimables. Les options d’indicateurs vous permettent de spécifier une longueur minimale de chaîne à rechercher.

Exemple : la commande suivante recherche des chaînes ASCII dont la longueur >est =3 dans la plage commençant à 0000000140000000 et se terminant 400 octets plus tard.

s-sa 0000000140000000 L400

La commande suivante recherche les chaînes ASCII dont la longueur >est =4 dans la plage commençant à 0000000140000000 et se terminant 400 octets plus tard

s -[l4]sa 0000000140000000 L400

La commande suivante fait la même chose, mais elle limite la recherche aux régions de mémoire accessibles en écriture.

s -[wl4]sa 0000000140000000 L400

La commande suivante fait la même chose, mais affiche uniquement l’adresse de la correspondance, plutôt que l’adresse et la valeur.

s -[1wl4]sa 0000000140000000 L400

La commande s-v recherche des objets du même type de données que l’objet Object . Vous pouvez utiliser cette commande uniquement si l’objet souhaité est une classe C++ ou un autre objet associé à des tables de fonctions virtuelles (Vtables). La commande s-vrecherche les adresses des tables virtuelles de cette classe dans la zone de mémoire Range. Si plusieurs tables virtuelles existent dans cette classe, l’algorithme de recherche recherche toutes ces valeurs de pointeur, séparées par le nombre approprié d’octets. Si des correspondances sont trouvées, le débogueur retourne l’adresse de base de l’objet et des informations complètes sur cet objet, de façon similaire à la sortie de la commande dt (type d’affichage).

Exemple : Supposons que le radix actuel soit 16. Les trois commandes suivantes font toutes la même chose : rechercher « Hello » dans les emplacements de mémoire 0012FF40 à 0012FF5F.

0:000> s 0012ff40 L20 'H' 'e' 'l' 'l' 'o' 
0:000> s 0012ff40 L20 48 65 6c 6c 6f 
0:000> s -a 0012ff40 L20 "Hello" 

Ces commandes localisent chaque apparence de « Hello » et retournent l’adresse de chaque modèle de ce type, c’est-à-dire l’adresse de la lettre « H ».

Le débogueur retourne uniquement les modèles qui sont entièrement contenus dans la plage de recherche. Les modèles qui se chevauchent sont trouvés correctement. (En d’autres termes, le modèle « QQQ » est trouvé trois fois dans « QQQQQ ».)

L’exemple suivant montre une recherche qui utilise le paramètre Type . Cette commande recherche le double mot « VUTS » dans les emplacements de mémoire 0012FF40 à 0012FF5F :

0:000> s -d 0012ff40 L20 'VUTS' 

Sur les ordinateurs little endian, « VUTS » est le même que le modèle d’octet « S » « T » « U » « V ». Toutefois, les recherches pour les WORD, DWORDs et QWORD retournent uniquement les résultats qui sont correctement alignés sur les octets.