5

スタックとベースポインターについてもっと学ぼうとしています。次のサンプル アセンブリ コードは、IA32 で gcc によってコンパイルされたバイナリの objdump からのものです。

08048e0b <func_3>:
8048e0b:    55                      push   %ebp
8048e0c:    89 e5                   mov    %esp,%ebp
8048e0e:    83 ec 28                sub    $0x28,%esp
8048e11:    8d 45 f0                lea    -0x10(%ebp),%eax
8048e14:    89 44 24 0c             mov    %eax,0xc(%esp)
8048e18:    8d 45 f4                lea    -0xc(%ebp),%eax
8048e1b:    89 44 24 08             mov    %eax,0x8(%esp)
8048e1f:    c7 44 24 04 65 9b 04    movl   $0x8049b65,0x4(%esp)

%ebp関数のパラメーターとローカル変数を参照するためにベース ポインターが使用されることはわかっています。通常、正のオフセットは関数に渡されるパラメーターであり、負のオフセットはローカル変数ですか?

行上8048e18: 8d 45 f4 lea -0xc(%ebp),%eax-0xc(%ebp) は何を指していますか?

4

1 に答える 1

9

関数への引数は (%ebp) + (positive value)あなたの場合、1つの引数があります。

(%ebp) - (positive value)はローカル変数であり、あなたの場合は2つあります。

次の画像を参照してください

ここに画像の説明を入力

呼び出し規約についても読むことができます。

于 2013-01-26T08:40:21.740 に答える