Befehl: debug
DEBUG ist ein Nachbau des gleichnamigen MS-DOS Befehls. Einige
kleinere Dinge sind nicht implementiert. Es unterstuetzt nicht nur
die 8086/8088 und 8087 Register und Befehlssaetze, sondern auch
die 32bit Register und Befehlsaetze bis zur PentiumPro CPU - mit
Ausnahme der MMX-Erweiterungen. DEBUG ist ein relativ weit fort-
geschrittenes DOS-Werkzeug fuer viele Anwendungen. Zum Beispiel
kann es benutzt werden zum:
* Finden von Fehlern in Programmen,
* Erstellen von Programmen durch Assembler-Code,
* Inspizieren und Bearbeiten von Binaer-Dateien.
Syntax:
DEBUG [[Laufwerk:][Pfad]Dateiname [Argumente]]
[Laufwerk:][Pfad]Dateiname Gibt die Datei an, die getestet
werden soll. Diese muss nicht
ausfuehrbar sein. Es kann auch
eine Binaer- oder Text-Datei sein.
Daher muss auch die Dateinamens-
Erweiterung angegeben werden.
Argumente Befehlszeilenparameter fuer die
zu testende Datei.
Siehe Programmausfuehrung unten,
fuer weitere Informationen ueber den
Aufruf von ausfuehrbaren Dateien.
Nach dem Start von Debug erwartet das Programm hinter dem Bindestrich
die Eingabe von Kommandos, wie Q zum Beenden oder ? zur Auflistung
der Befehle.
Optionen:
Q Beenden (Quit)
? Hilfe
Inspektion und Bearbeiten vom Speicher:
VERGLEICHEN (COMPARE):
C Bereich Adresse Vergleicht zwei Speicherbereiche und zeigt die
Unterschiede an. Nur die Start-Adresse des
zweiten Bereiches ist noetig. Dann wird fuer die
Groesse die gleiche wie beim ersten angenommen.
Zum Beispiel:
C 100,110 200
vergleicht den Bereich von 100,110 mit 200,210.
DUMP:
D [Bereich] Zeigt den Inhalt des Speicherbereiches. Ohne
Bereichsangabe werden 128 Bytes ausgegeben ent-
weder ab der Stelle der letzten DUMP Ausgabe
oder dem Beginn der geladenen Datei.
DM Anzeige der DOS-Speicher-Steuerblock-Kette
(Memory Control Block) und des aktuellen PSP.
EINGABE:
E Adresse [Liste] Ueberschreibt den Teil des Speichers, beginnend
ab der Adresse, mit der Liste der Bytes. Fuer
Eingabe einer Zeichenfolge setzen sie den Text
in Anfuehrungszeichen. Zum Beispiel:
E 100 "Hallo!"
FUELLEN:
F Bereich Liste Ueberschreibt einen Speicherbereich mit einer
sich wiederholenden Liste von Bytes. Um etwas
auszunullen, benutzen sie zum Beispiel:
E 100,110 0
Zum Fuellen mit dem Text "brumbrum" benutzen
Sie:
E 100,107 "brum"
VERSCHIEBEN (MOVE):
M Quellbereich Zieladresse
Kopiert den Quellbereich in einen anderen be-
ginnend ab der Zieladresse.
SUCHE:
S Bereich Liste Sucht nach alle Vorkommen der Liste von Bytes
in dem festgelegten Bereich und zeigt deren
Startadressen an.
Berechnung von Zahlen in Hexadezimal:
HEX
H Wert1 Wert2 Zeigt die Summe und Differenz der zwei angege-
benen Zahlen. Doppelwort-Werte koennen gehand-
habt werden.
Laden und Speichern von Dateien:
LADE PROGRAMM ODER DATEI:
L [Adresse] Lade Programm.
L Adresse Laufwerk Sektor Sektorzahl
Lade Sektor(en).
NAMENSVERGABE:
N [[Laufwerk:][Pfad]Programmnamen [Argumentenliste]]
Namen fuer die aktuelle Datei, Programm
festlegen.
SCHREIBE (WRITE) PROGRAMM ODER DATEI:
W [Adresse] Schreibt das aktuelle Programm, Datei auf die
Platte. Verwenden Sie N, um den Namen aendern,
wenn sie nicht die urspruengliche Datei ueber-
schreiben moechten.
W Adresse Laufwerk Sektor Zahl
Schreibt Sektor(en).
Assemblierung und Disassemblierung:
ASSEMBLIERUNG:
A [Adresse] Assemblieren.
DISASSEMBLIERUNG:
U [Bereich] Disassemblieren.
80x86 MODUS:
M[Einstellung] Der aktuellen Prozessortyp (zum Zwecke der
Assembler und Disassembler Warnungen, siehe
oben) kann als etwas anderes vereinbart wer-
den, ueber die folgenden Befehle:
m0 Deklariert den aktuellen Typ als 8088
m1 Deklariert als 80186
m2 Deklariert als 286
m3 Deklariert als 386
m4 Deklariert als 486
m5 Deklariert als Pentium
m6 Deklariert als Pentium Pro
MC Vereinbart die Existenz eines mathematischen
Coprozessors.
MNC Vereinbart das Fehlen eines mathematischen
Coprozessors.
MC2 Deklariert den mathematische Coprozessor vom
Typ 287 (nur gueltig, wenn der aktuellen
Prozessor ein 386er ist).
M? (nur bei aelteren Versionen): Ausgabe des
aktuellen Prozessortyps.
M Ausgabe des aktuellen Prozessortyps.
Programmausfuehrung:
GEHE ZU:
G [=Adresse] [Haltemarken]
Beginnt die Ausfuehrung des geladenen Programmes
oder des Maschinencodes an der angegebenen
Adresse. Diese wird an dem Haltepunkt unter-
brochen, um den Speicher etc. untersuchen zu
koennen.
FORTFAHREN:
P [=Adresse] [Anzahl]
Mit der Ausfuehrung um die Anzahl der gegebenen
Schritte weitermachen.
REGISTER:
R [Register [Wert]]
Anzeige alle CPU-Register oder Anzeige/Setzen
eines Registers. Akzeptiert 32-Bit-Register-
Namen (fuer CPUs ab 80386).
RN Zeigt den FPU Register Status. DEBUG zeigt nur
die Roh-Hex-Werte der Register an, waehrend
DEBUGX die Werte im Floating-Point-Format an-
zeigt.
RX Umschalten der Register-Anzeige von 8086 und
80386 (fuer CPU ab 80386).
VERFOLGUNG (TRACE):
T [=Adresse] [Anzahl]
Verfolgung.
TM [0|1] Setzt den Trace-Kommando-Modus, 0=verarbeite
INTs (Standard), 1=Einzelschritt INTs(MS-DOS-
Debug kompatibeler Modus).
I/O Anschluesse:
EINGABE:
I port Einlesen von einem Port
IW port Einlesen von einem WORT Port
ID port Einlesen von einem Doppelwort Port
Doppelwort-Werte benoetigen eine CPU ab 80386.
AUSGABE:
O port Wert Schreiben auf einen Port
OW port Wert Schreiben auf einen WORT Port
OD port Wert Schreiben auf einen Doppelwort Port
Doppelwort-Werte benoetigen eine CPU ab 80386.
Expansionsspeicher(EMS)-Befehle (nur, wenn EMM v4.0 vorhanden ist):
XA Nummer Allozieren einer "leeren" EMS-Zugriffsnummer
mit Null Seiten.
XD Nummer Freigeben der Zugriffsnummer.
XM logische-Seite physikalische-Seite Zugriffsnummer
Speicher abbilden.
XR Nummer Zahl Neuverteilung einer EMS Zugriffsnummer.
XS Status anzeigen.
X? Zeigt Hilfe zu X-Befehlen.
Kommentar:
DEBUG verwendet hexadezimal (Basis 16). Speicher-Adressen werden in
Segment:Offset Form angezeigt, z.B. 0D00:0100. Die letzten vier
hexadezimalen Stellen, bestimmen den Abstand im Segment und koennen
von 0000 bis FFFF reichen, was 64 Kilobytes umfasst.
Ausfuehrbare Dateien mit der Endung .COM haben alle ihre Daten und
Code in einem Segment. Fuer solche Dateien koennen Sie in der Regel
einfach nur den Offset bei der Angabe von Speicher-Adressen in Debug-
Kommandos angeben. Es wird dann vom Programm-Segment ausgegangen.
Das gleiche gilt auch fuer Text-, Binaer-Dateien, die kleiner als
64KB sind.
Zur Angabe eines Speicherbereiches, trennen sie zwei Adressen mit
einem Komma.
Das Laden von .HEX-Dateien ist nicht implementiert.
Der Assembler und Disassembler unterstuetzt alle oeffentlich
dokumentierten Anweisungen fuer die Intel-Chips ueber den Pentium
Pro (P6), mit Ausnahme von den MMX-Anweisungen. Diese informieren
sie, wenn eine Anweisung nicht fuer den aktuellen Prozessortyp
anwendbar ist. FPU Befehlscodes werden unterstuetzt.
Beispiel:
Bootsektor (Sektor Nummer 0 mit 512 Bytes=0x200) vom Laufwerk C:
(Nummer 2) in Datei BOOT_C.BIN auf erstem Diskettenlaufwerk sichern
durch folgende Eingaben:
A:
cd \
echo L 100 2 0 1 >BOOT_C.TXT
echo RCX >>BOOT_C.TXT
echo 200 >>BOOT_C.TXT
N BOOT_C.BIN >>BOOT_C.TXT
W >>BOOT_C.TXT
Q >>BOOT_C.TXT
DEBUG <BOOT_C.TXT
Mit Hilfe von DEBUG im normalen Speicherbereich einer Grafikkarte
nach charakteristischen Zeichenfolgen wie Jahreszahlen suchen um
die Karte zu identifizieren:
DEBUG
S C000:0000,07FF "BIOS"
S C000:0,7FF "(C)"
S c000:0,7ff "199"
s c000:0,7ff "200"
D C000:0000,100
Q
Siehe auch:
(emm386)
jemm386
jemmex
undelete
Datei:
Bitte lesen Sie auch die zum Befehl gehoerende lsm-Datei fuer
die neueste (Internet) oder die in dieser Hilfe beschriebene
Version des Befehls.
Diese lsm-Datei enthaelt u.a. den Namen des Programmierers, die
Downloadseite und einige andere Angaben.
Copyright © 2003 Robert Platt, uebersetzt 2009 von J. Jenderek.
Diese Datei ist abgeleitet vom FreeDOS Spezifikationen-HOWTO.
Vgl. auch die Datei H2Cpying bezueglich der Kopierbedingungen.