寄存器

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

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

寄存器集

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

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

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

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

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

操作寄存器

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

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

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

Pseudo-Registers

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

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

注意 并非所有伪寄存器在所有调试会话中或在特定会话中随时可用。

显示寄存器

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

事件

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