Register

Die Debugger-Engine kann verwendet werden, um die Register des Ziels zu untersuchen und zu ändern.

Die für das Ziel verfügbaren Register hängen von der Prozessorarchitektur ab. Eine Beschreibung der Register für den x86-Prozessor finden Sie unter Prozessorarchitektur. Eine vollständige Beschreibung der für einen Prozessor verfügbaren Register finden Sie in der Dokumentation des Prozessors.

Der Registersatz

Die GetNumberRegisters-Methode kann verwendet werden, um die Anzahl der Register auf dem Ziel zu ermitteln.

Auf jedes Register wird durch seinen Index verwiesen. Der Index des ersten Registers ist null, und der Index des letzten Registers ist die Anzahl der Register minus eins. Verwenden Sie GetIndexByName, um den Index eines Registers zu suchen, dessen Name bekannt ist.

Die GetDescription-Methode gibt Informationen zu einem Register zurück. Dies umfasst den Namen des Registers, den Typ der Werte, die es enthalten kann, und ob es sich um ein Unterregister handelt.

Ein Unterregister ist ein Register, das in einem anderen Register enthalten ist. Wenn sich die Unterregisterkarte ändert, ändert sich auch das Register, das sie enthält. Bei einem x86-Prozessor ist das Ax-Unterregister beispielsweise identisch mit den niedrigen 16 Bits des 32-Bit-Eax-Registers.

Es gibt drei spezielle Register, deren Werte mithilfe der folgenden Methoden gefunden werden können. Die Interpretation der Werte dieser Register ist plattformabhängig.

Bearbeiten von Registern

Der Wert eines Registers kann mithilfe der GetValue-Methode gelesen werden. Mehrere Register können mithilfe von GetValues und GetValues2 gelesen werden.

Ein Wert kann mithilfe der SetValue-Methode in ein Register geschrieben werden. Mehrere Register können mithilfe von SetValues und SetValues2 geschrieben werden.

Wenn beim Schreiben eines Werts in ein Register der angegebene Wert einen anderen Typ als der Typ des Registers aufweist, wird der Wert in den Typ des Registers konvertiert. Diese Konvertierung entspricht der Konvertierung, die von der CoerceValue-Methode ausgeführt wird. Diese Konvertierung kann zu Datenverlust führen, wenn der Typ des Registers den angegebenen Wert nicht halten kann.

Pseudo-Registers

Pseudoregister sind Variablen, die von der Debugger-Engine verwaltet werden und bestimmte Werte enthalten, z. B. $teb der Name des Pseudoregisters ist, dessen Wert die Adresse des Threadumgebungsblocks (Thread Environment Block, TEB) des aktuellen Threads ist. Weitere Informationen und eine Liste der Pseudoregister finden Sie unter Pseudoregistersyntax.

Jedes Pseudoregister verfügt über einen Index. Der Index ist eine Zahl zwischen null und der Anzahl der Pseudoregister – (von GetNumberPseudoRegisters zurückgegeben) minus eins. Verwenden Sie GetPseudoIndexByName, um den Index eines Pseudoregisters anhand seines Namens zu suchen. Die Werte von Pseudoregistern können mit GetPseudoValues gelesen werden, und Werte können mithilfe von SetPseudoValues in Pseudoregister geschrieben werden. Verwenden Sie GetPseudoDescription, um eine Beschreibung eines Pseudoregisters einschließlich des Typs zu erhalten.

Hinweis Nicht alle Pseudoregister sind in allen Debugsitzungen oder zu jeder Zeit in einer bestimmten Sitzung verfügbar.

Anzeigen von Registern

Die Methoden OutputRegisters und OutputRegisters2 formatieren die Register des Ziels und senden sie als Ausgabe an die Clients.

Events

Wenn sich die Werte der Register des Ziels ändern, ruft die Engine die Rückrufmethode IDebugEventCallbacks::ChangeDebuggeeState auf, wobei der Parameter Flags auf DEBUG_CDS_REGISTERS festgelegt ist.