Introduction à GDB

De UnixWiki
Aller à : navigation, rechercher

Bases

 $ gdb $prog                // Chargement d'un binaire:
 (gdb) r 123                // Lancement du programme avec comme paramètre 123
 (gdb) s ou stepi           // Avancer à la prochaine instruction, en entrant dans les fonctions
 (gdb) n ou nexti           // Avancer à la prochaine instruction sans entrer dans les fonctions
 (gdb) c                    // Continue l'exécution après un breackpoint par exemple
 (gdb) disass function_foo  // Désassemble la fonction function_foo
 (gdb) disass               // Désassemble tous
 (gdb) q                    // Quitter

Les breackpoints

 (gdb) b                    // Pose un breackpoint sur la ligne courante.
 (gdb) b main               // Pose un breackpoint sur la fonction main
 (gdb) b *0xdeadbeef        // Pose un breackpoint sur l'adresse mémoire 0xdeadbeef
 (gdb) hb *0xdeadbeef       // Pose un hardware breackpoint
 (gdb) i b                  // liste tout type de breackpoints


Les registres CPU

 (gdb) i f                  // Renvois l'état de la sauvegarde des registre EBP, EIP et leurs adresses en mémoire
 (gdb) i r                  // Renvoi l'état des registres
 (gdb) info all-registers   // Affiche tous les registres
 (gdb) print $eax           // Affiche le contenu du registre eax
 (gdb) set $eax=128         // Force le registre eax à 128

La mémoire

 (gdb) x/500x 0x41414141    // Dump de la mémoire à partir de l'adresse 0x41414141
 (gdb) x/26x 0xbffff8c2     // Dump de 26*4 octets à partir de l'adresse 0xbffff8c2
 0xbffff8c2:     0x90909090      0x90909090      0x90909090      0x90909090
 0xbffff8d2:     0x90909090      0x90909090      0x90909090      0x90909090
 0xbffff8e2:     0x90909090      0x90909090      0x90909090      0x90909090
 0xbffff8f2:     0x90909090      0x90909090      0x90909090      0x90909090
 0xbffff902:     0x90909090      0x90909090      0xc0319990      0x2f6e6852
 0xbffff912:     0x2f686873      0x8969622f      0x895352e3      0xcd0bb0e1
 0xbffff922:     0xfff8c280      0x535300bf
 gdb) x/500x $esp          // Dump de la mémoire à partir de la position pointé par ESP, c'est à dire en haut de la stack
 gdb) vmmap // affiche les segments mémoire du progz
 gdb) dumpmem out 0x41414141 // dump de la mémoire

Les process

 (gdb) attach 4009        // Attacher un PID (4009)
 (gdb) info proc          // Informations sur le process
 (gdb) info func     // Informations sur les fonctions
 (gdb)set follow-fork-mode child // pour suivre le processus fils au moment du fork

Tips

Passer le zeroflag à zéro

 (gdb) set $eflags = $eflags | 64

Afficher les flags

 (gdb)info registers eflags 

Modifier l'affichage de l'ASM

 set disassembly-flavor intel

ou

 set disassembly-flavor att

"piper" une commande dans gdb

 r <<< $(python -c 'print "A"*280 + "BBBB"')

Passer les signaux SIGTRAP au programme

 handle SIGTRAP pass nostop

Restaurer l'execution

 signal SIGTRAP

Passer les signaux SIGTRAP a GDB

 handle SIGTRAP nopass stop

Remote debugging

Sur la machine distante

 gdbserver :5039 binary

Si necessaire forwarder le port sur la machine local

 adb forward tcp:5039 tcp:5039

lancer gdb

 gdb binary

ou

 gdb-multiarch -q -nx binary

taper:

 gdb$ target remote :5039

How to Peda

Peda