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