gdb

2011-10-21 22 views
47

ile yığın içeriğini nasıl görebilirim gdb’de yeniyim, bu yüzden bir sorum var;gdb

  • Yığın içeriğine nasıl göz atabilirim? ex: kayıt içeriğini görmek için info registers yazdım. Yığın için $0x4(%esp)'un içeriğini nasıl görebilirim?

  • print /d $0x4(%esp) yazarken gdb hata veriyor.

platformu: linux gdb gdb bellek ekran komutlarını kullanmak gerekir

+0

olası yinelenen [Makine Yığını denetlemek için GDB'yi kullanma] (http://stackoverflow.com/questions/4019508/using-gdb-to-inspect-the-machine-stack) –

cevap

63

info frame, biçim sözdizimi kullanır x vb imzasız için imzalanan x/u $esp için onaltılık x/d $esp için x

x/x $esp bakmak gerekir verilen adreslerde hafızayı okumak için yığın çerçevesi hakkında bilgi

göstermek Ayrıca x/i $eip vb

39

. Temel olan, x, for examine. ancak bağlantılı

gdb> x/4xw $sp 

"onaltılık (x) içinde yığın işaretçisi (burada, $sp) Yukarıdaki bellek dört kelime (w)" yazdırmak için kullandığı sayfadaki bir örnek var. Bu teklif biraz değiştirildi.

32

Kullanım yoluyla cari talimat bakmak olabilir:

1. bt - backtrace: gösteri yığını fonksiyonları ve args

2. info frame - gösterisi yığını başlangıç ​​/ bitiş/args/halk işaretçileri

3. x/100x $sp - gösterisi yığını bellek

  
(gdb) bt 
#0 zzz() at zzz.c:96 
#1 0xf7d39cba in yyy ([email protected]=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 
ait