Outils d'utilisateurs

Outils du Site


reverse_engineering:gdb_cheatsheet

Ceci est une ancienne révision du document !


GDB Cheatsheet

Ce document a pour but de réunir différentes astuces pour accélérer le debugging sous GDB (ou apprendre à l'utiliser). FIXME A compléter et à réorganiser.

  • Poser un breakpoint à n'importe quelle adresse

Il suffit de faire:

break *0xdeadbeef

(attention à ne pas oublier le caractère '*' devant l'adresse).

  • Retrouver le “main” d'un exécutable stripped

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)
reverse_engineering/gdb_cheatsheet.1339445129.txt.gz · Dernière modification: 2017/04/09 15:33 (modification externe)