Come si può vedere il contenuto dello stack con GDB?


94

Sono nuovo in GDB, quindi ho alcune domande:

  • Come posso guardare il contenuto dello stack? Esempio: per vedere il contenuto del registro, digito info registers. Per lo stack, cosa dovrebbe essere?

  • Come posso vedere il contenuto di $0x4(%esp)? Quando print /d $0x4(%esp)digito, GDB restituisce un errore.

Piattaforma: Linux e GDB


Risposte:


113

info frame per mostrare le informazioni sullo stack frame

Per leggere la memoria a determinati indirizzi dovresti dare un'occhiata x

x/x $espper esadecimale x/d $espper firmato x/u $espper non firmato ecc. x usa la sintassi del formato, potresti anche dare un'occhiata all'istruzione corrente tramite x/i $eipecc.


69

Uso:

  • bt - backtrace: mostra le funzioni dello stack e gli argomenti
  • info frame - mostra i puntatori inizio / fine / args / locals dello stack
  • x/100x $sp - mostra la memoria dello stack
(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

55

È necessario utilizzare i comandi di visualizzazione della memoria di gdb. Quello di base è x, per esaminare . C'è un esempio nella pagina collegata che utilizza

gdb> x/4xw $sp

per stampare "quattro parole ( w) di memoria sopra il puntatore dello stack (qui, $sp) in esadecimale ( x)". La citazione è leggermente parafrasata.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.