Exercice 1 objectif : detecter un débordement de pile gcc : option D (macrodéf
Exercice 1 objectif : detecter un débordement de pile gcc : option D (macrodéfinition) gdb : backtrace Compiler appel.c % gcc appel.c o appel Lancer l'exécution % ./appel 5 23 Commentaire ? Lancer la même execution sous gdb % gdb appel gdb > run 5 23 Vous apprenez le lieu de l'erreur. Comment en eston arrivé là ? consulter la liste des appels... gdb > backtrace Commentaire ? Compiler en passant la macrodéfinition max=10000 % gcc Dmax=10000 appel.c o appel Lancer la même execution sous gdb % gdb appel gdb > run 5 23 Consulter la pile des appels. gdb > backtrace Commenter la différence du nombre d'appels empilés. Exercice 2 objectif : tracer une exécution pour vérification. option gcc : g ( debuggage ) commandes gdb : run, break, info, next, step, display Compiler le programme poids.c l'option de debuggage %% gcc g poids.c o poids Lancer Tarek Azzabi 1 GNU debugger TP GNU DEBUGGER %% gdb poids vous êtes sous le debuggeur. [ a ] Langer le programme avec l'argument de ligne de commande : 7 gdb> run 7 Le programme poids est ok. Commenter. [ b ] Faire un deuxième essai. gdb> run 31 [ c ] Placer un point d'arrêt à l'entrée de la fonction main. gdb> break main Lancer une exécution. gdb> run 7 Le programme s'arrête sur quelle ligne ? Passer à l'instruction suivante. gdb> next Itérer plusieurs fois jusquau bout... gdb> next [ d ] Refaire [ c ] en remplacant next par step. Quelle est la différence entre next et step ? [ e ] Placer un point d'arrêt à l'entrée de la fonction poids. gdb> break poids Consulter l'information sur les points d'arrêts. gdb> info break Lancer gdb> run 7 Continuer Tarek Azzabi 2 GNU debugger gdb> next Continuer avec next jusqua l'arret du programme. Comparer avec [b] [ f ] Suspendre le point d'arrêt sur main. gdb>disable 1 Préparer le tracage des valeurs de z et z1 en décimale gdb> display z gdb> display z1 et en binaire gdb> display /t z gdb> display /t z1 Exécuter avec le parametre 249 gdb> run 249 Continuer pas à pas jusquà l'arrêt du programme. Exercice 3 objectif : passage par valeur, par adresse. gdb : watch, disassemble Compiler la source swap.c % gcc Wall g swap.c o swap Lancer le debuggeur sur swap % gdb swap [ a ] Placer un point d'arret sur la procedure swap_val. gdb> b swap_val Lancer l'exécution gdb> run Préparer la trace des variables x, y du main : gdb> display main::x gdb> display main::y Tarek Azzabi 3 GNU debugger ainsi que celles des variables locales x, y gdb> display x gdb> display y Répéter : gdb> next Commenter. [ b ] Effacer les traces gdb> undisplay Relancer le programme. gdb> run Lister le code machine de la procédure main gdb> disassemble main Repérer les appels de swap_adr et swap_val. Faire la calcul des adresses effective empilées avant l'instruction : call 0x8048328 <swap_adr> gdb> print $ebp + 0xfffffffc Afficher les adresses de x et y. gdb> print &x gdb> print &y Conclusion. Tarek Azzabi 4 GNU debugger uploads/Industriel/ tpgdb.pdf
Documents similaires
-
15
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Jan 05, 2021
- Catégorie Industry / Industr...
- Langue French
- Taille du fichier 0.6402MB