r (Registres)

La commande r affiche ou modifie les registres, les registres à virgule flottante, les indicateurs, les pseudo-registres et les alias de nom fixe.

User-Mode

[~Thread] r[M Mask|F|X|?] [ Register[:[Num]Type] [= [Value]] ] 
r.

Kernel-Mode

[Processor] r[M Mask|F|X|Y|YI|?] [ Register[:[Num]Type] [= [Value]] ] 
r.

Paramètres

Processeur
Spécifie le processeur à partir duquel les registres sont lus. La valeur par défaut est zéro. Si vous spécifiez Processeur, vous ne pouvez pas inclure le paramètre Register . Tous les registres s’affichent. Pour plus d’informations sur la syntaxe, consultez Syntaxe multiprocesseur. Vous pouvez spécifier des processeurs uniquement en mode noyau.

Fil
Spécifie le thread à partir duquel les registres sont lus. Si vous ne spécifiez pas de thread, le thread actuel est utilisé. Pour plus d’informations sur la syntaxe, consultez Syntaxe de thread. Vous pouvez spécifier des threads uniquement en mode utilisateur.

Masque M
Spécifie le masque à utiliser lorsque le débogueur affiche les registres. Le « M » doit être une lettre majuscule. Masque est une somme de bits qui indiquent quelque chose sur l’affichage du registre. La signification des bits dépend du processeur et du mode (pour plus d’informations, consultez les tableaux de la section Remarques suivante). Si vous omettez M, le masque par défaut est utilisé. Vous pouvez définir ou afficher le masque par défaut à l’aide de la commande Rm (Register Mask).

F
Affiche les registres à virgule flottante. Le « F » doit être une lettre majuscule. Cette option équivaut à M 0x4.

X
Affiche les registres XMM SSE. Cette option équivaut à M 0x40.

Y
Affiche les registres YMM AVX. Cette option équivaut à M 0x200.

YI
Affiche les registres d’entiers YMM AVX. Cette option équivaut à M 0x400.

Z
Affiche les registres YMM AVX-512 (zmm0-zmm31) au format virgule flottante.

ZI
Affiche les registres YMM AVX-512 (zmm0-zmm31) au format entier.

K
Affichez les registres de prédicats Opmask AVX-512 (K0-K7).

?
(Attribution de pseudo-inscription uniquement) Entraîne l’acquisition d’informations typées par le pseudo-registre. N’importe quel type est autorisé. Pour plus d’informations sur la syntaxe r ? , consultez Exemples de programmes de commandes de débogueur.

Registre
Spécifie le registre, l’indicateur, le pseudo-registre ou l’alias de nom fixe à afficher ou à modifier. Vous ne devez pas précéder ce paramètre avec le signe (@). Pour plus d’informations sur la syntaxe, consultez Inscrire la syntaxe.

Num
Spécifie le nombre d’éléments à afficher. Si vous omettez ce paramètre, mais que vous incluez Type, la longueur complète du registre s’affiche.

Type
Spécifie le format de données dans lequel afficher chaque élément register. Vous pouvez utiliser Type uniquement avec des registres vectoriels 64 bits et 128 bits. Vous pouvez spécifier plusieurs types.

Vous pouvez spécifier une ou plusieurs des valeurs suivantes.

Type Format d’affichage

Ib

Octet signé

Ub

Octet non signé

Iw

Mot signé

uw

Mot non signé

id

DWORD signé

Ud

DWORD non signé

Iq

Quatre mots signés

Uq

Quatre mots non signés

f

Virgule flottante 32 bits

d

Virgule flottante 64 bits

Valeur
Spécifie la valeur à affecter au registre. Pour plus d’informations sur la syntaxe, consultez Syntaxe des expressions numériques.

.
Affiche les registres utilisés dans l’instruction actuelle. Si aucun registre n’est utilisé, aucune sortie n’est affichée.

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 le contexte d’inscription et d’autres paramètres de contexte, consultez Modification des contextes.

Remarques

Si vous ne spécifiez pas Register, la commande r affiche tous les registres non à virgule flottante, et la commande rF affiche tous les registres à virgule flottante. Vous pouvez modifier ce comportement à l’aide de la commande rm (Inscrire le masque).

Si vous spécifiez Register mais que vous omettez le signe égal (=) et le paramètre Value , la commande affiche la valeur actuelle du registre.

Si vous spécifiez Register et un signe égal (=), mais que vous omettez Value, la commande affiche la valeur actuelle du registre et invite à entrer une nouvelle valeur.

Si vous spécifiez Register, le signe égal (=) et Value, la commande modifie le registre pour qu’il contienne la valeur. (Si le mode silencieux est actif, vous pouvez omettre le signe égal. Vous pouvez activer le mode silencieux à l’aide de la commande sq (Définir le mode silencieux). En mode noyau, vous pouvez également activer le mode silencieux à l’aide de la variable d’environnement KDQUIET.)

Vous pouvez spécifier plusieurs registres, séparés par des virgules.

En mode utilisateur, la commande r affiche les registres associés au thread actif. Pour plus d’informations sur les threads, consultez Contrôle des processus et des threads.

En mode noyau, la commande r affiche les registres associés au contexte de registre actuel. Vous pouvez définir le contexte du registre pour qu’il corresponde à un thread, un enregistrement de contexte ou une trame d’interruption spécifique. Seuls les registres les plus importants pour le contexte de registre spécifié sont effectivement affichés, et vous ne pouvez pas modifier leurs valeurs. Pour plus d’informations sur le contexte d’inscription, consultez Contexte d’inscription.

Lorsque vous spécifiez un registre à virgule flottante par son nom, l’option F n’est pas obligatoire. Lorsque vous spécifiez un registre à virgule flottante unique, la valeur hexadécimale brute s’affiche en plus de la valeur décimale.

Les bits de masque suivants sont pris en charge pour un processeur x86 ou un processeur x64.

bit Valeur Description

0 1

0x1 0x2

Affiche les registres d’entiers de base. (La définition de l’un de ces bits ou des deux a le même effet.)

2

0x4

Affiche les registres à virgule flottante.

3

0x8

Affiche les registres de segment.

4

0x10

Affiche les registres MMX.

5

0x20

Affiche les registres de débogage. En mode noyau, la définition de ce bit affiche également le registre CR4.

6

0x40

Affiche les registres XMM SSE.

7

0x80

(Mode noyau uniquement) Affiche les registres de contrôle, par exemple CR0, CR2, CR3 et CR8.

8

0x100

(Mode noyau uniquement) Affiche le descripteur et les registres d’état des tâches.

9

0x200

Affiche les registres YMM AVX en virgule flottante.

10

0x400

Affiche les registres YMM AVX en entiers décimaux.

11

0x800

Affiche les registres AVX XMM en entiers décimaux.

Les exemples de code suivants illustrent les commandes r pour un processeur x86.

En mode noyau, la commande suivante affiche les registres du processeur 2.

1: kd> 2r 

En mode utilisateur, la commande suivante affiche les registres pour le thread 2.

0:000> ~2 r 

En mode utilisateur, la commande suivante affiche tous les registres eax associés à tous les threads (dans l’ordre de l’index des threads).

0:000> ~* r eax

La commande suivante définit le registre eax du thread actif sur 0x000000FF.

0:000> r eax=0x000000FF

La commande suivante définit le registre st0 sur 1.234e+10 (F est facultatif).

0:000> rF st0=1.234e+10

La commande suivante affiche l’indicateur zéro.

0:000> r zf 

La commande suivante affiche le registre xmm0 sous forme de 16 octets non signés, puis affiche le contenu complet du registre xmm1 au format à virgule flottante double précision.

0:000> r xmm0:16ub, xmm1:d 

Si la syntaxe actuelle est C++, vous devez faire précéder les registres par un signe at (@). Par conséquent, vous pouvez utiliser la commande suivante pour copier le registre ebx dans le registre eax .

0:000> r eax = @ebx

La commande suivante affiche les pseudo-registres de la même manière que la commande r affiche les registres.

0:000> r $teb

Vous pouvez également utiliser la commande r pour créer des alias de nom fixe. Ces alias ne sont pas des registres ou des pseudo-registres, même s’ils sont associés à la commande r . Pour plus d’informations sur ces alias, consultez Utilisation d’alias.

Voici un exemple de commande r. sur un processeur x86. La dernière entrée de la pile d’appels précède la commande elle-même.

01004af3 8bec            mov     ebp,esp
0:000> r.
ebp=0006ffc0  esp=0006ff7c