2012-02-27 7 views
0

私は、実行時に変数内の変数の位置をEclipse内でgdbを使って読み取ろうとしていますが、どれが正しいアドレスであるかは実際は分かりません。私がプログラムを逆アセンブルするときのgdbの出力は次の通りです。i7プロセッサコード解体のgdbでメモリアドレスを読み取るにはどうすればいいですか?

    main(): 
0000000000400634: push %rbp 
0000000000400635: mov %rsp,%rbp 
5     int i = 7; 
0000000000400638: movl $0x7,-0x4(%rbp) 
6     int j = 8; 
000000000040063f: movl $0x8,-0x8(%rbp) 
8     return 0; 
0000000000400646: mov $0x0,%eax 
9    } 

実行時の変数iの位置は何ですか? 私はそれが-0x4(%rbp)だと推測していますが、どのようにアドレスがわかるのでしょうか?

rbpの現在の値をとり、そこから4を減算する必要がありますか? この場合、rbpの値は0x7fffffffe250です。 したがって、実行時のメモリ内のiの位置は0x7fffffffe250 - 0x4ですか? それはちょうど0x7fffffffe250ですか?

+0

gdbで 'p&i'を試してみましたか? – PlasmaHH

+0

私はしていません。私はEclipse GUIを使ってそれをやろうとしています。 – ratsimihah

+0

gdbでそれをしたくないときにgdbで行う方法を尋ねると良い考えです。 – PlasmaHH

答えて

1

あなたの推測は正しいです:その関数内で%ebpの値をとり、4を引いてiが格納されているアドレスを与えます。ただし、実行時にスタックの位置に依存するため、このアドレスは予測できません。

また、すべての変数がメモリ内またはレジスタ内の固定位置にあるわけではないことに注意してください。コンパイラは複数の場所に値を移動させたり、それは不要です。

+0

ありがとうございました! – ratsimihah

関連する問題