Cheat sheet — Reverse engineering : GDB & assembleur x86
Débugger un binaire avec GDB (points d'arrêt, inspection des registres et de la mémoire, exemple strcmp pour retrouver une comparaison) et les bases de l'assembleur x86 : registres, instructions, flux de contrôle.
Mis à jour le 21 sept. 2026
Débugger avec GDB
Cas d’usage classique : trouver la chaîne attendue dans un strcmp.
gdb ./challenge
info functions strcmp # localiser la fonction
break strcmp # point d'arrêt
run <arguments> # lancer ; s'arrête à strcmp
À l’arrêt, inspecter les paramètres. Sur x86_64 ils sont dans les registres :
print (char*) $rdi # 1er argument (ex. saisie utilisateur)
print (char*) $rsi # 2e argument (ex. valeur attendue)
Sur i386 ils sont sur la pile :
x/s *(char**)($esp+4)
x/s *(char**)($esp+8)
Inspecter la mémoire pointée :
x/s <adresse> # en chaîne
x/20x <adresse> # 20 mots en hexa
Commandes utiles
| Commande | Rôle |
|---|---|
break <fn> / break *<adr> |
point d’arrêt sur fonction / adresse |
run <args> |
exécuter |
info functions / info registers |
lister fonctions / registres |
disassemble |
code assembleur autour du point courant |
x/s, x/20x |
examiner la mémoire |
continue (c) |
reprendre |
Binaire strippé (symboles supprimés) ou optimisé : travailler par adresses/offsets récupérés avec
objdump/readelf, etdisassembleautour du point d’arrêt.
Assembleur x86 (rappels)
Registres
- Généraux :
EAX(accumulateur),EBX(base),ECX(compteur),EDX(données). - Index/pointeurs :
ESI/EDI(source/destination),EBP(base de pile),ESP(sommet de pile). - Contrôle :
EIP(instruction courante),EFLAGS(indicateurs, dontZF).
Instructions courantes
MOV dest, src ; déplacer
PUSH / POP ; empiler / dépiler
ADD / SUB ; arithmétique
AND / OR / XOR ; logique
SHL / SHR ; décalages
CMP a, b ; comparer (positionne les flags)
JMP / JE / JNE ; sauts (JE si ZF=1)
CALL / RET ; appel / retour de fonction
En reverse, repérer un CALL strcmp@plt précédé de deux MOV qui empilent les
adresses des chaînes comparées est le schéma typique d’une vérification de mot
de passe — on pose un point d’arrêt sur le call et on lit les deux chaînes.
Outils complémentaires : Ghidra, IDA, Radare2 pour l’analyse statique, NASM pour écrire/assembler.