Bochs Debugger — Änderungen 6898 → 6909

Zeile 1: Zeile 1:
−
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.
+
Der [[Bochs|bochsinterne]] 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 ==
 
== Speicherinhalte ausgeben und manipulieren ==
Zeile 5: Zeile 5:
 
Um sich den Speicherinhalt an einer bestimmten Adresse ausgeben zu lassen, verwendet man einen der folgenden Befehle:
 
Um sich den Speicherinhalt an einer bestimmten Adresse ausgeben zu lassen, verwendet man einen der folgenden Befehle:
  
−
<asm>
+
<pre>x /nuf virtuelle_Adresse
−
x /nuf virtuelle_Adresse
+
xp /nuf physikalische_Adresse</pre>
−
xp /nuf physikalische_Adresse
 
−
</asm>
 
  
 
n, u und f bestimmen dabei die Ausgabe genauer:
 
n, u und f bestimmen dabei die Ausgabe genauer:
Zeile 19: Zeile 17:
 
Möchte man geziehlt bestimmte Werte im Arbeitsspeicher verändern, nutzt man:
 
Möchte man geziehlt bestimmte Werte im Arbeitsspeicher verändern, nutzt man:
  
−
<asm>
+
<pre>setpmem  physikalische_Adresse  Länge  Wert</pre>
−
setpmem  physikalische_Adresse  Länge  Wert
 
−
</asm>
 
  
 
Dadurch wird der Arbeitsspeicher von der physikalischen Adressen an soweit mit dem Wert gefüllt, wie die Länge angibt.
 
Dadurch wird der Arbeitsspeicher von der physikalischen Adressen an soweit mit dem Wert gefüllt, wie die Länge angibt.
Zeile 27: Zeile 23:
 
Zudem kann auch der Inhalt des [[Stack|Stacks]] ausgegeben werden mit:
 
Zudem kann auch der Inhalt des [[Stack|Stacks]] ausgegeben werden mit:
  
−
<asm>
+
<pre>print-stack [Anzahl_Elemente]</pre>
−
print-stack [Anzahl_Elemente]
 
−
</asm>
 
  
 
Im [[Real Mode]] werden dabei Words, im [[Protected Mode]] Dwords ausgegeben.
 
Im [[Real Mode]] werden dabei Words, im [[Protected Mode]] Dwords ausgegeben.
Zeile 40: Zeile 34:
 
|-
 
|-
 
|reg
 
|reg
−
|alle Register
+
|Alle [[Register]]
 
|-
 
|-
 
|sreg
 
|sreg
−
|Segment Register
+
|Segment-Register
 
|-
 
|-
 
|dreg
 
|dreg
−
|Debug Register
+
|[[Debug Register|Debug-Register]]
 
|-
 
|-
 
|creg
 
|creg
−
|Control Register
+
|[[Control Register|Control-Register]]
 
|-
 
|-
 
|info eflags
 
|info eflags
−
|EFLAGS Register
+
|[[EFLAGS]]
 
|-
 
|-
 
|fpu
 
|fpu
−
|FPU Register
+
|[[FPU]]-Register
 
|}
 
|}
  
 
Außerdem gibt es die Möglichkeit die allgemeinen Register zu verändern mit dem Befehl:
 
Außerdem gibt es die Möglichkeit die allgemeinen Register zu verändern mit dem Befehl:
  
−
<asm>
+
<pre>set Register = Wert</pre>
−
set Register = Wert
 
−
</asm>
 
  
 
== Code ausführen und ausgeben ==
 
== Code ausführen und ausgeben ==
Zeile 68: Zeile 60:
 
Die Codeausführung kann man jederzeit mit Strg+C anhalten oder auch gezielt Breakpoints setzen:
 
Die Codeausführung kann man jederzeit mit Strg+C anhalten oder auch gezielt Breakpoints setzen:
  
−
<asm>
+
<pre>vbreak segment:offset
−
vbreak segment:offset
+
lbreak lineare_adresse</pre>
−
lbreak lineare_adresse
 
−
</asm>
 
  
 
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:
 
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:
  
−
<asm>
+
<pre>watch r/w physikalische_Adresse</pre>
−
watch r/w physikalische_Adresse
 
−
</asm>
 
  
 
Mit r (lesen) und w (schreiben) wird bestimmt, bei welcher Art von Zugriff unterbrochen wird.
 
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.
+
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
 
Möchte man den Code dann weiterlaufen lassen, kann man entweder
 
mit
 
mit
  
−
<asm>
+
<pre>cont</pre>
−
cont
 
−
</asm>
 
  
 
normal fortfahren oder mit
 
normal fortfahren oder mit
  
−
<asm>
+
<pre>step [Anzahl_Schritte]</pre>
−
step [Anzahl_Schritte]
 
−
</asm>
 
  
 
Einzelschritte ausführen lassen.
 
Einzelschritte ausführen lassen.