140 votes

Comment voir le contenu de la pile avec GDB ?

Je suis novice en matière de GDB, et j'ai donc quelques questions à poser :

  • Comment puis-je consulter le contenu de la pile ? Exemple : pour voir le contenu du registre, je tape info registers . Pour la pile, qu'est-ce que ça doit être ?

  • Comment puis-je voir le contenu de $0x4(%esp) ? Lorsque je tape print /d $0x4(%esp) GDB donne une erreur.

Plate-forme : Linux et GDB

156voto

DipSwitch Points 1774

info frame pour montrer l'information sur le cadre de la pile

Pour lire la mémoire à des adresses données, il faut consulter x

x/x $esp pour l'hexagone x/d $esp pour signé x/u $esp pour les non signés, etc. x utilise la syntaxe de format, vous pouvez également jeter un coup d'œil à l'instruction courante via x/i $eip etc.

116voto

gaoithe Points 377

Utilisez :

  • bt - backtrace : montre les fonctions et les args de la pile
  • info frame - montrer les pointeurs de début/fin/args/locaux de la pile
  • x/100x $sp - show stack mémoire

    (gdb) bt

    0 zzz () at zzz.c:96

    1 0xf7d39cba in yyy (arg=arg@entry=0x0) at yyy.c:542

    2 0xf7d3a4f6 in yyyinit () at yyy.c:590

    3 0x0804ac0c in gnninit () at gnn.c:374

    4 main (argc=1, argv=0xffffd5e4) at gnn.c:389

    (gdb) info frame Stack level 0, frame at 0xffeac770: eip = 0x8049047 in main (goo.c:291); saved eip 0xf7f1fea1 source language c. Arglist at 0xffeac768, args: argc=1, argv=0xffffd5e4 Locals at 0xffeac768, Previous frame's sp is 0xffeac770 Saved registers: ebx at 0xffeac75c, ebp at 0xffeac768, esi at 0xffeac760, edi at 0xffeac764, eip at 0xffeac76c

    (gdb) x/10x $sp 0xffeac63c: 0xf7d39cba 0xf7d3c0d8 0xf7d3c21b 0x00000001 0xffeac64c: 0xf78d133f 0xffeac6f4 0xf7a14450 0xffeac678 0xffeac65c: 0x00000000 0xf7d3790e

68voto

unwind Points 181987

Vous devez utiliser les commandes d'affichage de la mémoire de gdb. La commande de base est x pour examiner . Il y a un exemple sur la page en lien qui utilise

gdb> x/4xw $sp

pour imprimer "quatre mots ( w ) de mémoire au-dessus du pointeur de pile (ici, $sp ) en hexadécimal ( x )". La citation est légèrement paraphrasée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X