Vous êtes sur la page 1sur 6

DEBUG

DEBUG
Debug est un utilitaire mis la disposition des utilisateurs des PC pour la mise au point des
programmes. Il convenait parfaitement cette tche quand on programmait les premiers PC
en assembleur ce qui ne se fait plus que trs exceptionnellement aujourdhui. Le langage
assembleur ne sert plus que pour des tches dites de bas niveau. Entendons par-l les
fonctions trs proches du hardware.
Actuellement les programmeurs utilisent des programmes de mise au point beaucoup plus
performants. Les dbogueurs actuels sont des outils graphiques adapts aux langages de haut
niveau et au dveloppement dapplications graphiques.
Lintrt du programme DEBUG est quil est fourni avec tous les systmes dexploitations de
Microsoft depuis le DOS 2.0 jusquaux plus rcents comme Windows XP. Ce petit
programme est prsent dans tous les PC et mme sur les disquettes de dmarrage. Nous
utiliserons DEBUG lors des prochaines sances de laboratoire pour explorer la mmoire et
des entres / sorties ou mme pour crire quelques lignes dassembleur en esprant acqurir
de cette manire une meilleure reprsentation du cur du systme.

Essai du programme DEBUG


Ouvrez une fentre DOS et appelez le programme de DEBUG :
C:\>DEBUG
La rponse de DEBUG est un tiret plac au dbut de la ligne. Cest linvite de DEBUG.
Elle annonce que le programme est prt recevoir une commande. Chaque commande se fait
en tapant une seule lettre (D pour Dump , Q pour Quit ) suivie de paramtres quand
cest ncessaire. La commande la plus pratique est celle pour demander de laide, le point
dinterrogation. Voici ce que cela donne :
-?
assemble (assembler)
compare (comparer)
dump (lister)
enter (entrer)
fill (remplir)
go (excuter)
hex (hexadcimal)
input (entrer depuis port)
load (charger)
move (dplacer)
name (dsigner)
output (envoyer sur port)
proceed (avancer)
quit (quitter)
register (registre)
search (rechercher)
trace (tracer)
unassemble (dsassembler)
write (crire)

A
C
D
E
F
G
H
I
L
M
N
O
P
Q
R
S
T
U
W

[adresse]
plage adresse
[plage]
adresse [liste]
Plage liste
[=adresse] [adresses]
valeur1 valeur2
port
[adresse] [lecteur] [secteur] [nbre]
plage adresse
[nchemin] [listearg]
port val
[=adresse] [nbre]
[registre]
plage liste
[=adresse] [valeur]
[plage]
[adresse] [lecteur] [secteur] [nbre]

allocate expanded memory (allouer EMS)


deallocate expanded memory (dsallouer EMS)
map expanded memory pages (affecter)
display expanded memory status (tat EMS)

Luc De Mey

XA [#pages]
XD [desc]
XM [pageL] [pageP] [desc]
XS

http://www.courstechinfo.be/OS/Debug.pdf

DEBUG
La commande debug peut tre invoque en prcisant le nom dun fichier charger en
mmoire. Le nom du fichier doit obligatoirement tre prcis avec son extension.
Exemple : DEBUG test.exe

Les adresses mmoire


Lunit de mmoire est loctet. Chaque octet a une adresse diffrente.
Les deux seules oprations possibles en mmoire sont la lecture et lcriture.
Ladresse mmoire est code en binaire mais nous la condensons par du code hexadcimal.
Elle se note en deux parties : le segment et loffset
Adresse physique = Segment * 16 + Offset
Exemple : 1234:0000 = 12340
On peut donc accder la mme adresse mmoire partir de segments distincts
Exemple : les adresses logiques C000:0010 et C001:0000 correspondent toutes deux
la mme adresse physique C0010
Cette rpartition de ladresse en segment et offset est due au fait que les microprocesseurs des
premiers PC navaient que 16 bits par registre alors quils avaient 20 bits pour former leurs
adresses. La plus grande adresse crite avec 20 bits est donc FFFFF soit 1 MB. Cest la taille
de la mmoire conventionnelle, la mmoire vue par le DOS.
On peut ainsi diviser la mmoire en un certain nombre de segments. La taille de chaque
segment est un multiple de 16 octets ( de 16 65536)
Les adresses des programmes et des donnes sont spcifies relativement des segments. Les
adresses de base de ces segments sont inscrites dans des registres de segment du CPU.
Les registres CS, DS, SS et ES sont des registres de segment. Une fois dans DEBUG vous
pouvez voir le contenu des registres avec la commande R.

La commande assemble permet denregistrer des instructions en langage assembleur.


Ex. Entrez ce petit programme de 4 instructions qui additionne les nombres 1234 et 5678,
en hexadcimal.
-A CS:100
150F:0100
150F:0103
150F:0106
150F:0108
150F:010A

MOV
MOV
ADD
INT

AX,1234
BX,5678
AX,BX
20

Terminez la saisie de ce code par une ligne sans instruction.

La commande Dump permet dafficher le contenu dune zone mmoire


Ex. Faite avec le programme EDIT un petit fichier texte et appelez-le Toto.txt
Nous chargeons ce texte en mmoire avec la commande DEBUG ensuite nous examinons
son code en mmoire :

C:\>DEBUG toto.txt
-D
150F:0100 43 65 20 70 65 74 69 74-20 74 65 78 74 65 20 73
150F:0110 65 72 74 20 64 27 65 78-65 6D 70 6C 65 0D 0A 14
150F:0120 07 89 46 FA 0B C0 75 06-46 39 76 FE 77 DA 8A 45

Luc De Mey

http://www.courstechinfo.be/OS/Debug.pdf

Ce petit texte s
ert d'exemple...
..F...u.F9v.w..E

DEBUG
Chaque ligne affiche par la commande Dump commence par une adresse sous la forme
Segment:Offset .Viennent ensuite les valeurs de 16 octets successifs affiches en
hexadcimal. Au bout de la ligne on retrouve un format texte quand cest possible.
Les octets qui ne correspondent pas des codes ASCII imprimables y sont reprsents par
des points.
La commande Dump accepte des paramtres.
D offset
Loffset combin avec ladresse de base contenue dans DS indique le
premier octet afficher. Le nombre de byte ntant pas prcis, le
programme affiche 128 bytes par dfaut (8 lignes de 16 octets).
D ES:offset
Affichage partir de ladresse [ES] :offset , loffset tant un nombre sous
forme hexadcimale. ES est ici un exemple, les registres de segment DS,
SS et CS peuvent aussi tre mentionns de cette manire.
Si aucune adresse de base nest spcifie, la commande dump considre
que le registre DS contient ladresse de base du segment.
D
La commande D employe seule affiche les 128 suivants
D base:offset
Base et Offset sont deux nombres de 16 bits crits en hexadcimal.
D dbut fin
Affichage dune zone mmoire dlimite entre deux adresses
D dbut L long Idem en indiquant la taille de la zone plutt que ladresse o elle se
termine
Exemple :

La date du BIOS est stocke dans chaque PC ladresse FFFF5. Voici


comment lobtenir :

C:\>DEBUG
-D FFFF:5 L 8
FFFF:0000 30 37 2F-32 35 2F 30 32 07/25/02
-Q

Attention la date est sous la forme amricaine mois/jour/anne. Le BIOS de cet exemple
date donc du 25 juillet 2002.

Enter est la commande pour entrer de nouvelles valeurs en mmoire.


On lui indique ladresse du dbut de la zone mmoire examiner puis les valeurs y
inscrire.
-E CS:100 41,42,43,44,45,46,47

ou ce qui revient au mme puisque (41 est le code ASCII de A, 42 de B etc.)


-E CS:100 "ABCDEFGH"
-D CS:100
150F:0100 41 42 43 44 45 46 47 48-20 74 65 78 74 65 20 73
150F:0110 65 72 74 20 64 27 65 78-65 6D 70 6C 65 0D 0A 14

ABCDEFGH texte s
ert d'exemple...

La commande E permet aussi dexaminer la mmoire byte par byte et des les modifier un
un. Tapez E puis ladresse du byte mmoire que lon veut et ENTER
Ladresse saffiche la ligne suivante. Elle est suivie du contenu du byte examin puis
dun point.
-E B800:09F0
B800:00A0 43.41

07.

3A.42

07.

Tapez une autre valeur puis un espace pour passer au byte suivant. Si vous voulez passer
au byte suivant sans modifier la valeur du byte affich il suffit de taper de suite un espace
(en sinterdisant de faire un retour chariot). La touche moins permet de revenir en
arrire. Vous pouvez examiner ainsi plusieurs bytes en les modifiants ou non. Pressez la
touche ENTER pour terminer les modifications.

Luc De Mey

http://www.courstechinfo.be/OS/Debug.pdf

DEBUG

fill Rempli une zone mmoire avec le ou les codes spcifis.


Syntaxe :
F plage liste
Exemples :
(Attention bien respecter les adresses indiques pour ne pas aller jardiner nimporte o !)
- F B800:1E0 L A0 6E

Remplit la plage mmoire qui part de ladresse B800 :01E0 et qui a une longueur de
160 bytes avec le ode 6E. (Vous devriez voir la quatrime ligne de votre cran se
remplir avec des caractres n en jaune sur fond kaki. Ladresse B8000 tait celle du
dbut de la mmoire vido lpoque du DOS. Cette mmoire vido est
parfaitement simule par WINDOWS)
- F B800:1E0 L A0 41 4E

Remplit la quatrime ligne de lcran avec des A majuscules en jaune sur fond
rouge.

Go Lance le programme. La commande accepte deux paramtres mais ils sont


facultatifs : ladresse de dpart que lon fait prcder du signe gale et une ventuelle
adresse de point darrt.
Exemples :
- G
Commande go sans paramtres. Le programme dmarre donc depuis
ladresse CS :IP
- G =100
Lance le programme partir de ladresse CS:0100
- G =100 108
Lance le programme depuis ladresse CS:0100 en plaant un point
darrt ladresse CS:0108

HEX sert de calculatrice hexadcimale. On lui spcifie deux nombres et on obtient la


somme et la diffrence.
- H 10 2
0012 000E
-- H 10 20
0030 FFF0

Input port
Lecture dun port dentre/sortie. Le seul paramtre de la commande indique le numro du
port que lon dsire lire.
- I 378

affiche le byte qui est contenu ladresse 378 des entres / sorties.
NB. Cela permet de lire les ports dentres mais aussi relire aux adresses des ports de
sorties les codes qui y ont t crits.

Load
Chargement en mmoire du fichier dont le nom a dj t spcifi comme argument de la
commande DEBUG ou laide de la commande N
La commande L permet aussi la lecture des secteurs dun disque sans tenir compte du
systme de fichier.
Syntaxe :
L adresse Ndisque NSecteurDeDpart NombreDeSecteurs
Exemple :
L 100 2 0 1
= Charger ladresse 100, le secteur n 0 du disque n 2 (A=0, C= 2)
Les registres BX:CX donnent sur 32 bits la taille des donnes charges en mmoire.

M Move
Luc De Mey

http://www.courstechinfo.be/OS/Debug.pdf

DEBUG
Recopie le contenu dune plage mmoire vers une nouvelle adresse.
- M 100 10F 140

Copie en DS:0140 le contenu de la plage mmoire allant de DS:0100 DS:010F


- M 100 L 10 140

Cette commande a le mme effet que la prcdente. La seule diffrence est quici la plage
recopier nest pas donne par les adresses de dbut et de fin ( 100 et 10F) mais par son
adresse de dpart et par sa taille ( 100 et 10)

Name
Indiquer le nom du fichier ouvrir pour le lire ultrieurement avec la commande L (Load)
ou y crire avec la commande W (write).

Output port value


Ecriture dans un port de sortie
- O 378

FF

crit le code FF dans le port dont ladresse est 378

Quit
Sortir du programme DEBUG.

Proceed Excution du programme pas pas, un peu de la mme manire que la


commande T (trace) mais sans entrer dans les routines appeles.
Voir les commandes similaires : T et G

Read Commande de visualisation des registres


-R
AX=0000 BX=0000
DS=150F ES=150F
150F:0100 41

CX=0021 DX=0000 SP=FFEE


SS=150F CS=150F IP=0100
INC
CX

BP=0000 SI=0000 DI=0000


NV UP EI PL NZ NA PO NC

Le registre CS Code Segment contient ladresse de base du segment o se trouve le


code du programme que lon teste avec DEBUG. Cest dans lexemple ci-dessus le
segment 150F. Le registre IP est le registre dinstruction. Il contient ici la valeur 0100.
La premire instruction du programme est donc ladresse 150F:0100 ce qui quivaut
ladresse physique 151F0. ( Segment x 1OH + Offset)
Remarquez que si debug vient dtre appel avec comme argument le nom dun fichier,
les registres BX :CX contiennent la taille du fichier charg. 21H dans lexemple cidessus.
La commande R permet aussi de modifier un registre mais il faut alors prciser lequel.
-R CX
CX 0021
:ABCD
-

demander laffichage du registre CX


CX contient la valeur hexadcimale 0021
les : sont une invite la modification

Trace Excution des instructions pas pas en affichant aprs chacune delles ltat
des registres et le code de linstruction suivante.

Luc De Mey

http://www.courstechinfo.be/OS/Debug.pdf

DEBUG
Exemples :
- T
Excute et trace linstruction qui se trouve ladresse CS:IP
AX=1234 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=150F ES=150F SS=150F CS=150F IP=0103
NV UP EI PL ZR NA PE NC
150F:0103 BB7856
MOV
BX,5678
-

La commande T accepte deux paramtres :


- ladresse de dpart faire prcder du signe gale ( ex. T =100)
- le nombre dinstruction tracer ( ex. T 3)
Ces paramtre peuvent sutiliser simultanment ( ex. T =100 3 )
Commandes similaires : G et P

Unassemble Commande de "dsassemblage". Affiche le contenu de la mmoire en


utilisant les mnmoniques du langage assembleur pour afficher les instructions.
Exemples :
-U 100 106

Demande laffichage des instructions comprises entre les


adresses CS:0100 et CS:0106
150F:0100 MOV AX,1234
150F:0103 MOV BX,5678
150F:0106 ADD AX,BX

Syntaxe : U [plage]
Commande associe : A

W write

Ecriture sur le disque.


Le nom du fichier crire est soit le nom du fichier charg par la commande debug soit un
nom donn par la commande N.
La taille de la zone mmoire enregistrer sur le disque peut tre donne en 32 bits via les
registres BX:CX.
Ladresse de dpart de la zone mmoire est CS :100 par dfaut moins que vous ne
prcisiez une autre.

La commande W permet aussi lcriture dun disque en prcisant uniquement le ou les


secteurs crire. Inutile de prciser quil vaut mieux savoir ce que lon fait avant dcrire
une telle commande sinon cest la scoumoune !!!
Syntaxe : W [adresse] [lecteur] [secteur] [nbr]

Luc De Mey

http://www.courstechinfo.be/OS/Debug.pdf