Ceci est une ancienne révision du document !
Ce document a pour but de réunir différentes astuces pour accélérer le debugging sous GDB (ou apprendre à l'utiliser).
A compléter et à réorganiser.
Il suffit de faire:
break *0xdeadbeef
(attention à ne pas oublier le caractère '*' devant l'adresse).
L'adresse vers la fonction main est le dernier argument push avant l'appel de __libc_start_main. Il nous faut donc break sur cette fonction
break __libc_start_main
avant de lancer le programme.
On regarde ensuite la pile d'appel (via la commande "bt") pour retrouver l'adresse de retour de la fonction **_start**, qui nous donne une sortie comme ceci: <code>gdb $ bt
#0 0x4ad8b5c0 in __libc_start_main () from /lib/libc.so.6 #1 0x08048391 in ?? ()</code>. L'adresse de retour dans l'exemple est 0x08048391. On regarde donc quelques instructions en arrière pour trouver le bon push:
x/5i 0x08048391-11 0x8048380: push 0x8048530 0x8048385: push ecx 0x8048386: push esi 0x8048387: push 0x8048495 0x804838c: call 0x8048360 <__libc_start_main@plt>
(on remplacera 0x08048391 par l'adresse trouvée avec “bt”), et l'adresse du main est celle du push juste avant le call. Il suffit donc de poser un breakpoint dessus pour retomber sur le main. * Lire une chaîne de caractères dont l'adresse est stockée sur la pile (dans cet exemple, esp+4)
print (char*) *(char**)($esp+4)