Fonctionnement d'un debugger ( tel Turbo Debu
Pascal
-
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 ?
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:
- Fonctionnement d'un debugger ( tel Turbo Debu
- Turbo pascal - Télécharger - Édition & Programmation
- Fonctionnement du protocole http - Guide
- Fonctionnement processeur - Guide
- Notice de fonctionnement - Guide
- Tel bouygues - Guide
5 réponses
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...)
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...)
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.
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.
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 ?
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 ?
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... :-)
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... :-)
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)
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)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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.
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.