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)]]