web-dev-qa-db-fra.com

comment peut-on voir le contenu de la pile avec gdb

Je suis nouveau à GDB, alors j'ai une question;

  • comment puis-je regarder le contenu de la pile? ex: pour voir le contenu du registre, je tape info registers. Pour empiler ce qui devrait être

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

plate-forme: linux gdb

78
user478571

info frame pour afficher les informations sur le cadre de la pile

Pour lire la mémoire à des adresses données, vous devriez jeter un oeil à x

x/x $esp pour hex x/d $esp pour signé x/u $esp pour unsigned etc. x utilise la syntaxe de format, vous pouvez également consulter l’instruction en cours via x/i $eip etc.

93
DipSwitch

Utilisation:

1. bt - backtrace: affiche les fonctions de pile et les arguments

2. info frame - affiche les pointeurs de début/fin/argument/local

3. x/100x $sp - affiche la mémoire de la pile

    
 (gdb) bt 
 # 0 zzz () à zzz.c: 96 
 # 1 0xf7d39cba dans yyy (arg = arg @ entry = 0x0) à aaa.c: 542 
 # 2 0xf7d3a4f6 in yyyinit () à aaa.c: 590 
 # 3 0x0804ac0c dans gnninit () à gnn.c: 374 
 # 4 principal (argc = 1, argv = 0xffffd5e4) à gnn.c: 389 
 
 (Gdb) info frame 
 Niveau de pile 0, frame à 0xffeac770: 
 Eip = 0x8049047 dans la partie principale (goo. c: 291); Saved eip 0xf7f1fea1 
 langue source c. 
 Arglist à 0xffeac768, args: argc = 1, argv = 0xffffd5e4 
 Locaux à 0xffeac768, la trame précédente est sp. 0xffeac770 
 a été enregistrée. enregistre: 
 ebx à 0xffeac75c, ebp à 0xffeac768, esi à 0xffeac760, edi à 0xffeac764, eip à 0xffeac76c 
 
 (gdb) x/10x $ sp 
 0xffeac. : 0xf7d39cba 0xf7d3c0d8 0xf7d3c21b 0x00000001 
 0xffeac64c: 0xf78d133f 0xffeac6f4 0xf7a14450 0xffeac678 
 0xffeac65c: 0xffeac65c: 0x00000000 0xf7d3790e 
57
gaoithe

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

gdb> x/4xw $sp

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

52
unwind