« Introduction à GDB » : différence entre les versions
Aller à la navigation
Aller à la recherche
Aucun résumé des modifications |
Aucun résumé des modifications |
||
(Une version intermédiaire par le même utilisateur non affichée) | |||
Ligne 88 : | Ligne 88 : | ||
== How to Peda == |
== How to Peda == |
||
[https://eugenekolo.com/blog/better-disassembly-with-gdb-peda/ Peda] |
Dernière version du 19 novembre 2018 à 13:15
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