r(寄存器)

r 命令显示或修改寄存器、浮点寄存器、标志、伪寄存器和固定名称别名。

用户模式

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

内核模式

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

参数

处理器
指定从中读取寄存器的处理器。 默认值为零。 如果指定 处理器,则不能包含 Register 参数 -- 将显示所有寄存器。 有关语法的详细信息,请参阅 多处理器语法。 只能在内核模式下指定处理器。

线
指定从中读取寄存器的线程。 如果未指定线程,则使用当前线程。 有关语法的详细信息,请参阅线程语法。 只能在用户模式下指定线程。

M 面具
指定调试器显示寄存器时要使用的掩码。 “M”必须是大写字母。 掩码 是指示寄存器显示内容的总和。 位的含义取决于处理器和模式(有关详细信息,请参阅以下“备注”部分中的表)。 如果省略 M,则使用默认掩码。 可以使用 Rm (Register Mask) 命令设置或显示默认掩码

F
显示浮点寄存器。 “F”必须是大写字母。 此选项等效于 M 0x4

X
显示 SSE XMM 寄存器。 此选项等效于 M 0x40

Y
显示 AVX YMM 寄存器。 此选项等效于 M 0x200


显示 AVX YMM 整数寄存器。 此选项等效于 M 0x400

Z
以浮点格式显示 AVX-512 YMM 寄存器(zmm0-zmm31)。


以整数格式显示 AVX-512 YMM 寄存器(zmm0-zmm31)。

K
显示 AVX-512 Opmask 谓词寄存器(K0-K7)。


(仅限伪注册分配)使伪寄存器获取类型化信息。 允许任何类型。 有关 r? 语法的详细信息,请参阅调试器命令程序示例

注册
指定要显示或修改的寄存器、标志、伪寄存器或固定名称别名。 不得在此参数前面加上 at (@) 符号。 有关语法的详细信息,请参阅 Register Syntax

Num
指定要显示的元素数。 如果省略此参数但包含 Type,则会显示完整寄存器长度。

类型
指定要在其中显示每个寄存器元素的数据格式。 只能对 64 位和 128 位向量寄存器使用 Type 。 可以指定多个类型。

可以指定以下一个或多个值。

类型 显示格式

ib

已签名字节

ub

未签名字节

iw

带符号单词

微波

无符号单词

id

已签名的 DWORD

ud

未签名的 DWORD

智商

带符号四字

uq

无符号四字

f

32 位浮点

d

64 位浮点

Value
指定要分配给寄存器的值。 有关语法的详细信息,请参阅数字表达式语法

.
显示当前指令中使用的寄存器。 如果未使用寄存器,则不显示任何输出。

环境

说明
模式 用户模式、内核模式
目标 实时、崩溃转储
平台 全部

其他信息

有关寄存器上下文和其他上下文设置的详细信息,请参阅更改上下文

注解

如果未指定 Register,r 命令将显示所有非浮点寄存器,rF 命令显示所有浮点寄存器。 可以使用 rm (Register Mask) 命令更改此行为

如果指定 Register 但省略了等号 (=) 和 Value 参数,该命令将显示寄存器的当前值。

如果指定 Register 和等号 (=),但省略 Value,该命令将显示寄存器的当前值,并提示输入新值。

如果指定 Register、等号(=)和 Value,则命令将更改寄存器以包含值。 (如果 静默模式 处于活动状态,则可以省略等号。 可以使用 sq(设置静默模式)命令打开静默模式。 在内核模式下,还可以使用 KDQUIET 环境变量打开安静模式。

可以指定多个寄存器,用逗号分隔。

在用户模式下, r 命令显示与当前线程关联的寄存器。 有关线程的详细信息,请参阅 控制进程和线程

在内核模式下, r 命令显示与当前 寄存器上下文关联的寄存器。 可以将寄存器上下文设置为与特定线程、上下文记录或陷阱帧匹配。 实际上仅显示指定寄存器上下文最重要的寄存器,并且无法更改其值。 有关注册上下文的详细信息,请参阅 “注册上下文”。

按名称指定浮点寄存器时, 不需要 F 选项。 指定单个浮点寄存器时,除了小数值之外,还会显示原始十六进制值。

基于 x86 的处理器或基于 x64 的处理器支持以下 掩码 位。

Bit 说明

0 1

0x1 0x2

显示基本整数寄存器。 (设置其中一个或两个位具有相同的效果。

2

0x4

显示浮点寄存器。

3

0x8

显示段寄存器。

4

0x10

显示 MMX 寄存器。

5

0x20

显示调试寄存器。 在内核模式下,设置此位还会显示 CR4 寄存器。

6

0x40

显示 SSE XMM 寄存器。

7

0x80

(仅限内核模式)显示控件寄存器,例如 CR0、CR2、CR3 和 CR8。

8

0x100

(仅限内核模式)显示描述符和任务状态寄存器。

9

0x200

在浮点中显示 AVX YMM 寄存器。

10

0x400

以十进制整数显示 AVX YMM 寄存器。

11

0x800

以十进制整数显示 AVX XMM 寄存器。

以下代码示例显示了 基于 x86 的处理器的 r 命令。

在内核模式下,以下命令显示处理器 2 的寄存器。

1: kd> 2r 

在用户模式下,以下命令显示线程 2 的寄存器。

0:000> ~2 r 

在用户模式下,以下命令显示与所有线程关联的所有 eax 寄存器(按线程索引顺序)。

0:000> ~* r eax

以下命令将当前线程的 eax 寄存器设置为0x000000FF。

0:000> r eax=0x000000FF

以下命令将 st0 寄存器设置为 1.234e+10( F 是可选的)。

0:000> rF st0=1.234e+10

以下命令显示零标志。

0:000> r zf 

以下命令将 xmm0 寄存器显示为 16 个无符号字节,然后以双精度浮点格式显示 xmm1 寄存器的完整内容

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

如果当前语法C++,则必须在寄存器前面加上一个 at sign (@)。 因此,可以使用以下命令将 ebx 寄存器 复制到 eax 寄存器。

0:000> r eax = @ebx

以下命令以 r 命令显示寄存器的方式显示伪寄存器。

0:000> r $teb

还可以使用 r 命令创建固定名称别名。 这些别名不是寄存器或伪寄存器,即使它们与 r 命令相关联。 有关这些别名的详细信息,请参阅 “使用别名”。

下面是基于 x86 的处理器上的 r. 命令的示例。 调用堆栈的最后一个条目位于命令本身之前。

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