Gnu DeBugger

GNU Debugger ou gdb pour les intimes est un débogueur créé par Richard Stallman et distribué sous licence GNU GPL.

Ce programme UNIX permet de déboguer un programme en cours d’exécution en analysant la mémoire, les registres, sur des programmes compilés.

Gdb permet également le débogage post exécution afin d’aider à comprendre l’apparition de crashs dans les programmes. On peut par exemple stopper le programme sous des conditions spécifiques ou changer certaines instructions de sorte que vous puissiez corriger les effets d’un bogue tout en continuant et peut-être d’apprendre l’existence d’un autre.

Le soft est normalement présent par défaut sur toutes les distributions Linux mais nous détaillerons la manière de l’installer si tel n’était pas le cas.

Téléchargement

Télécharger gdb-7.1.tar.bz2

Installation

#tar xjf gdb-7.1.tar.bz2
#cd gdb-7.1
#./configure
#make

Si vous avez une erreur lors du make, essayer d’installer ncurses5 :

#apt-get install libncurses5-dev

Les différentes commandes de gdb

Voici un document pdf récapitulant une bonne partie des commandes disponibles :

http://lestutosdenico.free.fr/tutos/gdb/gdb-ref.pdf

Prise en main

Nous allons détaillé l’analyse d’un programme C au moyen de l’outil.

Dans un premier temps, on compile notre programme « prog.c » avec en sortie l’exécutable « programme ».

On lance gdb sur notre programme au moyen de la ligne suivante :

#gdb -q ./programme

-q signifie simplement le fait de ne pas afficher les messages d’introduction et de copyright lors du lancement de gdb.

La commande list va nous permettre de regarder 10 lignes du code source.

Pour désassembler le programme sans la source, on aurait pu utiliser la commande disas main.

Nous plaçons ensuite nos breakpoints : break 6, break strcpy et break 8.

Un breakpoint permet d’indiquer un arrêt d’exécution lorsque le programme arrivera à l’adresse, la fonction ou la ligne spécifiée.

C’est la commande run qui va lancer le programme (toujours en mode debogue).

On peut vérifier que l’exécution de ce dernier s’arrête bien sur l’exécution de la ligne 6, 7 et 8 comme demandé auparavant.

La commande i r eip signifie info register eip. Elle permet de voir ce qu’il y a dans le registre eip.

Pour rappel sur le registre eip :

Le registre EIP contient l’offset de la prochaîne instruction à exécuter. Il est modifié automatiquement à chaque exécution et peut être manipulé par des instruction du type jmp, call, ret, etc.

Pour finir, j’ai lancé une analyse sur la mémoire en affichant 5 instructions d’eip :

x/5x $eip

La syntaxe se compose de x/* registre ou * peut-être le nombre de valeur que l’on souhaite affiché suivi d’une lettre :

i = instructions assembler
o
= octal
s = ascii
t = binaire
u = décimal
x = hexa

Voilà qui termine cette petite introduction à gdb.

Bon débogage à tous 😉

3 Responses to "Gnu DeBugger"

Laissez un commentaire