私はgdbを初めて使うので、いくつか質問があります。gdbでスタックの内容を見る方法
どのようにスタックの内容を見ることができますか? ex:レジスタの内容を見るには、
info registers
と入力してください。何のためにスタックする$0x4(%esp)
の内容はどのように見えますか?私がprint /d $0x4(%esp)
と入力するとgdbがエラーになります。
プラットフォーム:Linuxの GDB
私はgdbを初めて使うので、いくつか質問があります。gdbでスタックの内容を見る方法
どのようにスタックの内容を見ることができますか? ex:レジスタの内容を見るには、info registers
と入力してください。何のためにスタックする
$0x4(%esp)
の内容はどのように見えますか?私がprint /d $0x4(%esp)
と入力するとgdbがエラーになります。
プラットフォーム:Linuxの GDB
info frame
あなたは、符号なしのために署名x/u $esp
用の六角x/d $esp
ためx
x/x $esp
を見てみる必要があるなどxは形式構文を使用して、あなたもx/i $eip
など
あなたはGDBのメモリ表示コマンドを使用する必要があります。基本的なものはx
, for examineです。リンク先の「16進数で4つの(ここでは、$sp
)スタックポインタ上のメモリのワード(w
)(x
)」を印刷する
gdb> x/4xw $sp
を使用するページ上の例があります。引用はやや言い換えられます。与えられたアドレスにメモリを読み取るには、スタックフレーム情報
を表示する
使用を経て現在の命令を見てみることができます:
bt
- バックトレース:ショースタック機能や引数info frame
- ショースタックの開始/終了/引数/地元の人々ポインタ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の
可能重複[GDBを使ってマシンスタックを検査する](http://stackoverflow.com/questions/4019508/using-gdb-to-inspect-the-machine-stack) –