Debugging Tools for Windows

寄存器语法

调试器能够操作寄存器和浮点寄存器。(操作寄存器的命令概述,请看读写寄存器和标志。)

在表达式中使用寄存器时,最好加一个 @ 前缀,暗示调试器紧接着的文本是一个寄存器的名字。

如果你使用 MASM 表达式语法,对于某些很常用的寄存器可以忽略 @ 前缀。在 x86 系统上,@ 前缀可忽略的寄存器有 eax, ebx, ecx, edx, esi, edi, ebp, eipefl。然而,如果你指定一个很少使用的寄存器,不带 @ 前缀,调试器将首先把该文本解析为十六进制数值。如果该文本包含非十六进制字符,接下来会被解析为符号。最后,如果没有匹配的符号,它将被解析为寄存器。

如果你使用 C++ 表达式语法,这个 @ 前缀总是必需的。

r (Registers)命令是个例外。它的第一个参数总是被解析为寄存器或者伪寄存器(@ 标记不是必须的,有也是允许的)。如果有第二个参数,会根据缺省的表达式语法来解释。所以,如果缺省的表达式语法是 C++,你应该采用下面的命令把 ebx 寄存器拷贝给 eax 寄存器。

0:000> r eax = @ebx

各个处理器特有的寄存器和指令信息,请看处理器架构

x86 处理器上的标志位

x86 处理器同样使用许多一位的寄存器称为标志位。查看x86标志,获得所有标志位以及查看修改标志位的语法。

寄存器和线程

每个线程有自己的寄存器值。当该线程执行时这些值保存在 CPU 的寄存器中,当其它线程执行时保存在内存中。

在用户模式下,任何对寄存器的参考都被解析为和当前线程相关的寄存器。详细请看控制进程和线程

在内核模式下,任何对寄存器的参考都被解析为和当前寄存器上下文(register context)相关的寄存器。寄存器上下文可设置为和特定的线程、上下文记录或者异常帧相匹配。对指定的寄存器上下文只有最重要的寄存器能够显示,并且它们的值不能修改。

Build machine: CAPEBUILD