2011-10-21 8 views
47

私はgdbを初めて使うので、いくつか質問があります。gdbでスタックの内容を見る方法

  • どのようにスタックの内容を見ることができますか? ex:レジスタの内容を見るには、info registersと入力してください。何のためにスタックする

  • $0x4(%esp)の内容はどのように見えますか?私がprint /d $0x4(%esp)と入力するとgdbがエラーになります。

プラットフォーム:Linuxの GDB

+0

可能重複[GDBを使ってマシンスタックを検査する](http://stackoverflow.com/questions/4019508/using-gdb-to-inspect-the-machine-stack) –

答えて

63

info frameあなたは、符号なしのために署名x/u $esp用の六角x/d $espためx

x/x $espを見てみる必要があるなどxは形式構文を使用して、あなたもx/i $eipなど

39

あなたはGDBのメモリ表示コマンドを使用する必要があります。基本的なものはx, for examineです。リンク先の「16進数で4つの(ここでは、$sp)スタックポインタ上のメモリのワード(w)(x)」を印刷する

gdb> x/4xw $sp 

を使用するページ上の例があります。引用はやや言い換えられます。与えられたアドレスにメモリを読み取るには、スタックフレーム情報

を表示する

32

使用を経て現在の命令を見てみることができます:

1. bt - バックトレース:ショースタック機能や引数

2. info frame - ショースタックの開始/終了/引数/地元の人々ポインタ

3. x/100x $sp - ショースタックメモリ

  
(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 
関連する問題