Tuning de GDB
Par Mickaël le 19 juillet 2008, 22h05 - Scripts - Lien permanent
GNU Debugger est un débogueur libre et performant pour les systèmes de type Unix. Il permet de suivre et de modifier l'exécution d'un programme pour de nombreuses plateformes en local ou à distance.
La version de base propose toutes les fonctions nécessaire mais peut encore être amélioré. Le fichier ~/.gdbinit contient les instructions qui sont exécutées lors du lancement de GDB.
Le fichier d'initialisation débuté sur anticrack.de, maintenant reverse-engineering.net, permet d'avoir un affichage à la Softice et des fonctions pour faciliter l'exploration d'un processus, ce qui est bien utile.
Voici les principales fonctions définies jusqu'à la version 7 (le * indique un argument) :
- les points d'arrêt : bpl (lister), bp * (ajouter), bpc * (effacer), bpe * (activer), bpd * (désactiver), bpt * (ajouter temporairement) et bpm * (accès à une adresse) ;
- les informations sur le processus débogué : argv (arguments du programme), stack (liste des appels de fonction), eflags (tous les drapeaux du registre), func (fonctions du programme), var (variables du programme), lib (bibliothèques partagées liées au programme), sig (actions pour chaque signal), thread (threads en cours), dis * (désassembler la fonction qui comprend l'adresse donnée) ;
- l'affichage : hex_quad * (8 valeurs hexadécimales), hexdump * (16 valeurs hexadécimales/ASCII), context (contexte d'exécution : registres, pile, données et code lors de l'arrêt), context-on/context-off (activer/désactiver son affichage lors de chaque arrêt), contextsize-stack/contextsize-data/contextsize-code (changer le nombre de lignes affichées dans le contexte) ;
- le contrôle de l'exécution : n (instruction suivante sans rentrer dans les fonctions), go * (avance de N instructions assembleur), pret (aller à la fin de la fonction actuelle), step_to_call (s'arrête au prochain call), init (démarrer le programme et s'arrêter à _init), start (démarrer le programme et s'arrêter à _start), sstart (démarrer le programme et s'arrêter à _libc_start_main), main (démarrer le programme et s'arrêter au main) ;
- le changement des drapeaux : cfc (retenue), cfp (parité), cfa (retenue auxiliaire), cfz (zéro), cfs (signé), cft (trap), cfi (interruption), cfd (direction), cfo (débordement) ;
- patcher à la volée : nop * (écrit un nop), null * (écrit 0), int3 (écrit l'interruption int3 : retour au débogueur) ;
- différentes utilisations : assemble (assemble les instructions utilisateur en opcodes x86 avec nasm), gas_asm (assemble les instructions utilisateur en opcodes x86 avec gas et objdump), dump_hexfile * * * (dumper la mémoire dans un fichier au format hexadécimal Intel), dump_binfile * * * (dumper la mémoire dans un fichier au format binaire), trace_calls (sauvegarder l'exécution dans ~/gdb_trace_calls.txt sous forme linéaire avec indication des calls), trace_run (sauvegarde l'exécution dans ~/gdb_trace_run.txt de manière indentée) ;
- l'aide : tips liste les mini tutoriaux pour certaines actions et bien sur le help * avec le nom de la commande.
Et maintenant une belle capture d'écran (où on peut voir le contexte) :

Ressources : GDB Refcard, Documentation complète sur GDB
Commentaires
Interessant tout ca, notamment la fonction trace_calls. Cependant, elle ne semble pas prendre en compte tous les "calls"... apparement, elle ne liste que les appels vers des librairies externes... Mais bon, ya moyen d'améliorer ca
Sinon, il y a une nouvelle version (7.2) :
http://truthix.dump.cz/released/.gd...