r(寄存器)

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

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.

参数

处理器
指定从中读取寄存器的处理器。 默认值为零。 如果指定 Processor,则不能包含 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? 语法的详细信息,请参阅 调试器命令程序示例

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

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

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

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

类型 显示格式

Ib

已签名的字节

ub

无符号字节

iw

有符号单词

uw

无符号单词

id

已签名 DWORD

Ud

无符号 DWORD

智商

带符号象限字

uq

无符号象限字

f

32 位浮点

d

64 位浮点

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

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

环境

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

其他信息

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

注解

如果未指定 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 符号 (@) 。 因此,可以使用以下命令将 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