2017-03-13 4 views
0

私はアセンブリ言語の理解を深めようとしています。私は関数がスタックフレームを作成するときに、EBPにスタックポインタ値をコピーするよりも、現在のEBPをプッシュすることを理解しています。最初の(そして唯一の)関数パラメータはEBP + 8によってアクセスされます。しかし、なぜ8? EBPを押した後の次の値は論理的にオフセットされています4.私は多くのWebページを読んでいますが、私はこの部分を理解していないようです。x86アセンブリの最初のパラメータがオフセット8から始まるのはなぜですか?

答えて

2

「不足している」DWORDが戻りアドレスです。コールスタックは次のようになります。

ebp  : saved ebp 
ebp + 4 : return address 
ebp + 8 : pushed parameter 

そしてスタック空間は、(通常は)スタックフレームの後にそれらのために予約されているので機能は、ローカル変数を使用している場合、それらはebp - xxとして参照されます

ebp - 8 : second local 
ebp - 4 : first local 
ebp  : saved ebp 
ebp + 4 : return address 
ebp + 8 : pushed parameter 
+0

感謝君は。私は間違った部分に焦点を当てました(呼び出し規約については読んでいましたが、基本的なことは忘れました) – Inline

関連する問題