Der [[Bochs]] interne Debugger stellt eine nützliche Hilfe beim [[Debugging|Debuggen]] eines Betriebssystems dar, weil er unter anderem Registerinhalte, Speicherinhalte oder auch disassemblierte Codestellen ausgeben kann.
== Speicherinhalte ausgeben und manipulieren ==
Um sich den Speicherinhalt an einer bestimmten Adresse ausgeben zu lassen, verwendet man einen der folgenden Befehle:
x /nuf virtuelle_Adresse
xp /nuf physikalische_Adresse
n, u und f bestimmen dabei die Ausgabe genauer:
* n steht für die Anzahl der auszugebenen Einheiten
* u für die Größe einer Einheit (b=1, h=2, w=4 und g=8 Bytes)
* f legt das Ausgabeformat fest (d=dezimal, x=hexadezimal und t=binär)
Wenn [[Paging]] deaktiviert ist, dann bewirken beide Befehle dasselbe.
Möchte man geziehlt bestimmte Werte im Arbeitsspeicher verändern, nutzt man:
setpmem physikalische_Adresse Länge Wert
Dadurch wird der Arbeitsspeicher von der physikalischen Adressen an soweit mit dem Wert gefüllt, wie die Länge angibt.
Zudem kann auch der Inhalt des [[Stack|Stacks]] ausgegeben werden mit:
print-stack [Anzahl_Elemente]
Im [[Real Mode]] werden dabei Words, im [[Protected Mode]] Dwords ausgegeben.
== Register ausgeben und manipulieren ==
{| {{prettytable}}
!Befehl||auszugebene Register
|-
|reg
|alle Register
|-
|sreg
|Segment Register
|-
|dreg
|Debug Register
|-
|creg
|Control Register
|-
|info eflags
|EFLAGS Register
|-
|fpu
|FPU Register
|}
Außerdem gibt es die Möglichkeit die allgemeinen Register zu verändern mit dem Befehl:
set Register = Wert
== Code ausführen und ausgeben ==
Die Codeausführung kann man jederzeit mit Strg+C anhalten oder auch gezielt Breakpoints setzen:
vbreak segment:offset
lbreak lineare_adresse
Auch gibt es die Möglichkeit Watchpoints an bestimmte Arbeitsspeicherstellen zu setzen. Wenn an diesen Stellen dann auf die Daten zugegriffen wird, wird die Codeausführung unterbrochen:
watch r/w physikalische_Adresse
Mit r (lesen) und w (schreiben) wird bestimmt, bei welcher Art von Zugriff unterbrochen wird.
Wird die Ausführung angehalten, dann gibt [[Bochs]] die aktuelle Codestelle automatisch disassembliert aus.
Möchte man den Code dann weiterlaufen lassen, kann man entweder
mit
cont
normal fortfahren oder mit
step [Anzahl_Schritte]
Einzelschritte ausführen lassen.
== Sonstiges ==
* Mit "quit" wird der Debugger beendet.
* Mit "help" kann man sich die Liste der verfügbaren Befehle ausgeben.
* Mit "show int" werden Interruptaufrufe ausgegeben.
== Weblinks ==
*[[http://bochs.sourceforge.net/doc/docbook/user/internal-debugger.html|Liste aller verfügbaren Befehle (Englisch)]]