Skip to content

Instantly share code, notes, and snippets.

@brahimmachkouri
Created January 2, 2025 20:27
Show Gist options
  • Save brahimmachkouri/7a805a3758fbc07af5bb5696ff6d1c17 to your computer and use it in GitHub Desktop.
Save brahimmachkouri/7a805a3758fbc07af5bb5696ff6d1c17 to your computer and use it in GitHub Desktop.
GDB/Pwndbg mémo

Déboguer un Programme avec GDB et Pwndbg

Ce tutoriel couvre les bases de l'utilisation de GDB avec l'extension Pwndbg pour déboguer des programmes en C ou des exécutables ELF.


1. Installation de GDB et Pwndbg

  1. Installer GDB :

    sudo apt update
    sudo apt install gdb
  2. Installer Pwndbg :

    git clone https://github.com/pwndbg/pwndbg.git
    cd pwndbg
    ./setup.sh
  3. Vérifier l'installation : Lance GDB et observe si Pwndbg s'initialise automatiquement :

    gdb

    Un message ressemblant à ceci devrait apparaître :

    pwndbg: Loaded X commands. Type 'pwndbg' for a list.
    

2. Lancer GDB avec un Programme

  1. Lancer un programme avec ses arguments :

    gdb --args ./programme arg1 arg2
  2. Charger le programme dans GDB :

    gdb ./programme
  3. Démarrer l'exécution :

    run

3. Points d'arrêt (Breakpoints)

Ajouter un point d'arrêt :

  • Sur une fonction spécifique :
    b main  # Point d'arrêt à la fonction `main`
    b fonction_xyz  # Sur une autre fonction
  • À une adresse spécifique :
    b *0xdeadbeef

Liste des points d'arrêt :

info breakpoints

Supprimer un point d'arrêt :

del 1  # Supprime le point d'arrêt numéro 1

4. Exécution et Navigation

Exécuter le programme jusqu'au point d'arrêt :

run

Avancer d'une instruction (en assembleur) :

si  # Step Instruction

Avancer d'une ligne (en C) :

  • Entrer dans une sous-routine :
    step
  • Passer au-dessus de la sous-routine :
    next

Continuer jusqu'au prochain point d'arrêt :

continue

5. Exploration de la Mémoire

Examiner une adresse mémoire :

  • En hexadécimal :
    x/10x 0xdeadbeef  # Affiche 10 mots en hexadécimal
  • En instructions assembleur :
    x/10i 0xdeadbeef  # Affiche 10 instructions
  • En chaînes de caractères :
    x/10s 0xdeadbeef

Obtenir les registres :

info registers

Afficher automatiquement l'état du programme (avec Pwndbg) :

context

6. Patcher en Direct

Modifier une valeur mémoire :

  • Par exemple, pour modifier un mot à l'adresse 0xdeadbeef :
    set *(int *)0xdeadbeef = 42

Patcher du code en assembleur :

  • Charger une instruction nop à une adresse donnée :
    set *(char *)0xdeadbeef = 0x90

7. Explorer en Hexadécimal

Afficher une portion du programme en hexadécimal :

hexdump 0xdeadbeef

Désassembler autour de l'adresse actuelle :

disassemble

8. Debugger la Pile

Voir la pile d'appels :

bt  # Backtrace

Examiner les variables locales :

info locals

Explorer les arguments passés à une fonction :

info args

9. Utiliser des Watchpoints

Surveiller une adresse mémoire pour des modifications :

watch *(int *)0xdeadbeef

Surveiller l'accès à une variable :

rwatch variable

10. Commandes Utiles de Pwndbg

  • Afficher la disposition mémoire :

    vmmap
  • Suivre les allocations de mémoire (malloc, free) :

    heap
  • Analyser les protections d'une adresse mémoire :

    checksec
  • Afficher des informations sur les fichiers ELF chargés :

    info files

11. Quitter GDB

Pour quitter GDB :

quit

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment