私はgdbが初めてなので、質問があります。
スタックの内容をどのように見ることができますか?例:レジスタの内容を表示するには、info registers
と入力します。スタックの場合
$0x4(%esp)
のコンテンツを表示するにはどうすればよいですか? print /d $0x4(%esp)
と入力すると、gdbでエラーが発生します。
プラットフォーム:linux gdb
info frame
はスタックフレーム情報を表示します
指定されたアドレスのメモリを読み取るには、x
を確認する必要があります
x/x $esp
16進数x/d $esp
署名付きx/u $esp
署名なしなどxはフォーマット構文を使用し、x/i $eip
などを使用して現在の命令を確認することもできます。
つかいます:
bt
-バックトレース:スタック関数と引数を表示info frame
-スタックの開始/終了/引数/ローカルポインターを表示x/100x $sp
-スタックメモリの表示(gdb)bt #0 zzz()at zzz.c:96 #1 0xf7d39cba in yyy(arg = arg @ entry = 0x0)at yyy.c:542 #2 yyyinit()in 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);保存されたeip 0xf7f1fea1 ソース言語c。 Arglist at 0xffeac768、args:argc = 1、argv = 0xffffd5e4 Locals at 0xffeac768、Previous frame's sp is 0xffeac770 Savedレジスタ: ebx at 0xffeac75c、ebp at 0xffeac768、esi at 0xffeac764、edi at 0xffeac764、eip at 0xffeac76c (gdb)x/10x $ sp 0xffeac63c :0xf7d39cba 0xf7d3c0d8 0xf7d3c21b 0x00000001 0xffeac64c:0xf78d133f 0xffeac6f4 0xf7a14450 0xffeac678 0xff.ac_c6:0x00000000 0xf7d3
Gdbのメモリ表示コマンドを使用する必要があります。基本的なものは x
、調べるため です。を使用するリンク先ページに例があります
gdb> x/4xw $sp
「スタックポインター(ここでは、$sp
)の上のメモリの4ワード(w
)を16進数(x
)で印刷します。引用はわずかに言い換えられています。