寄存器

调试器引擎可用于检查和更改目标的寄存器。

目标上可用的寄存器取决于其处理器体系结构。 有关 x86 处理器寄存器的说明,请参阅 处理器体系结构。 有关可用于处理器的寄存器的完整说明,请参阅该处理器的文档。

注册集

GetNumberRegisters 方法可用于查找目标上的寄存器数。

每个寄存器都由其索引引用。 第一个寄存器的索引为零,最后一个寄存器的索引是寄存器数减一。 若要查找其名称已知的寄存器的索引,请使用 GetIndexByName

GetDescription 方法返回有关寄存器的信息。 这包括寄存器的名称、可以保存的值的类型以及它是否为子注册。

子注册是包含在另一个寄存器中的寄存器。 子注册发生更改时,包含它的寄存器也会更改。 例如,在 x86 处理器上, ax 子注册与 32 位 eax 寄存器的低 16 位相同。

有三个特殊寄存器,可以使用以下方法找到其值。 这些寄存器的值的解释依赖于平台。

操作寄存器

可以使用 GetValue 方法读取寄存器的值。 可以使用 GetValuesGetValues2 读取多个寄存器。

可以使用 SetValue 方法将值写入寄存器。 可以使用 SetValuesSetValues2 编写多个寄存器。

将值写入寄存器时,如果提供的值的类型与寄存器的类型不同,则将该值转换为寄存器的类型。 此转换与方法 CoerceValue 执行的转换相同。 如果寄存器的类型无法保存提供的值,则此转换可能会导致数据丢失。

Pseudo-Registers

伪寄存器 是由保存某些值的调试器引擎维护的变量,例如, $teb 是伪寄存器的名称,其值是当前线程的线程环境块(TEB)的地址。 有关详细信息以及伪寄存器的列表,请参阅 Pseudo-Register 语法

每个伪寄存器都有一个索引。 索引是一个介于零和伪寄存器总数减一之间的数字, 伪寄存器总数由 GetNumberPseudoRegisters 返回。 若要按其名称查找伪寄存器的索引,请使用 GetPseudoIndexByName。 可以使用 GetPseudoValues 读取伪寄存器的值,并且可以使用 SetPseudoValues 将值写入伪寄存器。 有关伪寄存器的说明(包括其类型)请使用 GetPseudoDescription

注意 并非所有伪寄存器都可用于所有调试会话或在特定会话中的任何时间。

显示寄存器

OutputRegistersOutputRegisters2 方法格式化目标的寄存器,并将其作为输出发送到客户端。

事件

每当目标寄存器的值发生更改时,引擎都会调用 IDebugEventCallbacks::ChangeDebuggeeState 回调方法,并将参数 标志 设置为DEBUG_CDS_REGISTERS。