Fonctionnement d'un debugger ( tel Turbo Debu

Pascal -  
 Pascal -
Salut à tous,
J'aimerai savoir comment fonctionne un Debugger DOS (unpeu comme Turbo Debugger de borland).
Comment fait il pour executer un programme pas à pas ?
CAD : comment un programme peu executer un autre programme instruction par instruction ?
Doit-on désassembler le programme et mettre des points d'arret après chaque instructions ?
Comment fonctionne le Trap Flag ? et comment fonctionnent les interruptions 1 et 3 ????
Bref .... Comment créer un mini debugger en somme ?
A voir également:

5 réponses

sebsauvage Messages postés 33415 Statut Modérateur 15 667
 
Il y a plusieurs méthodes.

La plus classique consiste à utiliser une fonctionnalité des processeurs Intel qui permet, après chaque instruction, d'aller exécuter un bout de code (le débugger lui-même).

Autre solution assez courante: le coup de l'interruption 3.
Le débugger détourne l'interruption 3 vers lui, remplace l'instruction suivante du programme par INT 3 et exécute l'instruction qui précède.
L'instruction s'exécute, l'INT 3 renvoie au débugger qui déplace l'INT 3 à l'instruction suivante, etc.

(Je ne sais pas si j'ai été très clair...)
0
sebsauvage Messages postés 33415 Statut Modérateur 15 667
 
Comment créer un mini debugger en somme ?

Ouf... là je ne m'y risquerai pas... mais c'est faisable !

Mais tu as très bien... c'est effectivement Trap Flag et INT1/3.
(Il arrive qu'on utilise INT 1 à la place de 3 quand les programmes l'utilisent (assez rare)).

Je me souviens aussi avoir utilisé Protect!EXE/COM, un petit wrapper d'EXE anti-débugging assez génial qui envoyait bouler la totalité des débuggers, fingueur in zeu noze.
0
sebsauvage Messages postés 33415 Statut Modérateur 15 667
 
"Mais tu as très bien" --> "Mais tu as très bien vu"

(faut que je dorme plus |-)
0
Pascal
 
Donc , on doit OBLIGATOIREMENT désassembler le prog .... ???
Pourtant , meme si Turbo debuger se trompe lors du désassemblage , il arrive quand meme a tracer le code correctement ... (s'il se trompe sur le longueur de l'instruction suivante il devrait planter....).
Je pense que TD désassemble le code pour nous l'afficher , mais qu'il le trace sans se soucier du travail precedent ....
Il semble tracer le code indépendament des mnémoniques qu'il affiche....
Si on utilise un piége anti désassembleur (saut au millieu d'une instruction) TD se trompe dans la traduction mais trace correctement le code ..... Mystère .....
N'y à t il pas un GURU du Débugger ici ??? A l'aide !!!!! 8-)
ps : Comment configurer le TRAP FLAG ?
0
sebsauvage Messages postés 33415 Statut Modérateur 15 667
 
Donc , on doit OBLIGATOIREMENT désassembler le prog .... ???
Pas du tout.
Mais ton débugger doit absolument connaître le format des instructions en langage machine (rien que pour pouvoir poser correctement les points d'arrêt).

Désassembler et afficher à l'écran ne sont pas une obligation :-)

Mais ceci dit, si ton débugger ne sait pas désassembler, le débogage sera très pénible pour l'utilisateur (personnellement, je ne lis pas le langage machine dans le texte. A part quelques instructions genre CALL, INT ou NOP :-)


Si on utilise un piége anti désassembleur (saut au millieu d'une instruction) TD se trompe dans la traduction mais trace correctement le code ..... Mystère .....

Il arrive que le désassembleur se trompe en commençant au mauvais endroit.
C'est le microprocesseur lui-même qui incrémente le pointeur d'instruction. Le débogueur se contente de récupérer ce pointeur d'instruction. Il est donc systématiquement bien placé.

Résultat: on peut avoir un pointeur d'instruction qui pointe au milieu d'une instruction qu'affiche le désassembleur.
C'est bug du désassembleur.

N'y à t il pas un GURU du Débugger ici ??? A l'aide !!!!! 8-)
ps : Comment configurer le TRAP FLAG ?


Désolé, je n'ai fait que faire mumuse avec tout ça... :-)
0
Pascal_
 
Tout d'abord merci beaucoup websauvage .
Je ne pretend pas programmer un Turbo Debugger like :o)
Je souhaite juste en connaitre unpeu plus sur les debugger et les systèmes heuristiques ( anti viral) .... malheureusement ..... je n'ai pas beaucoup de temps (comme beaucoup).
Je n'arrive pas a trouver de doc sur les interruption de debuggage .... je sais qu'il faut configurer le TRAP FLAG ....
Bon , je cherche , et si je trouve je post la solution .
Merci beaucoup. A bientot j'espere :o)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Pascal
 
la solution est ICI :

http://vx.netlux.org/lib/vdi01.html
http://vx.netlux.org/lib/vdi02.html

En gros : on detourne l'int 1 vers notre routine puis on met le trap flag à 1.

pushf
pop ax ;Save the flag
or ax,0100 ;Set the TF to ON
push ax
popf

AVANT chaque code l'int 1 est appelée.
0