スタックが下向きに成長し、EBPがスタックの底を指している場合、なぜこのような操作がmov eax [ebp + 4]
と表示されますか?現在のスタックフレームの外部で変数を参照していないでしょうか?ポジティブEBP参照の目的は何ですか?
答えて
引数は、関数が呼び出される前にスタックにプッシュされます。
機能の開始時に、EBPが保存される必要がある他のレジスタと同様にプッシュされ、EBPがESPに等しく設定されます。
Cの自動変数のように関数内で宣言された変数がある場合、ESPはそれらの変数を保持するためにEBPとESPの間のスペースを残すために減分されます。
したがって、引数にはEBP+offset
、ローカル変数にはEBP-offset
が使用されます。
関数が返る前に、ESPはEBPに戻され、スタックは解放されます。
ありがとうございました!私はEBPが設定されたときに誤解を抱いていました。 –
'ebp-offset'はローカル変数、' ebp + offset'は引数です。 (反対に)。そして、espは減分され(減算され)、ローカル変数のための領域が作成されます。スタックは下に "成長"します。 OPは実際に彼の質問でうまく理解しています。彼は自分のコードを呼び出す直前にスタックに格納されている値(呼び出し引数)が「外部」であることを認識していませんでした。 @JacobPersi – Ped7g
- 1. Javascriptでウィンドウオブジェクトを参照する目的は何ですか?
- 2. "未使用の参照を削除する"の目的は何ですか
- 3. 目的c - 参照カウント
- 4. Web参照とサービス参照の違いは何ですか?
- 5. 不変参照とは何ですか?
- 6. 参照先とは何ですか?
- 7. 参照分布とは何ですか?
- 8. ASP.NETキャッシュを参照すると、有効期限切れの目的または理由は何ですか?
- 9. 静的な目的は何ですか?
- 10. ST参照は透過的ですか?
- 11. 開始時の静的参照変数とインスタンス参照変数の違いは何ですか?
- 12. 目的のC(iPhone)で参照値を渡す方法
- 13. バインドされたクラス参照が共変型を返すようにする目的は何ですか?
- 14. Mongoclientとは何ですか?その目的は何ですか?
- 15. 原子参照カウントと自動参照カウントの違いは何ですか?
- 16. Ember.Containerの目的は何ですか
- 17. マーカーインターフェイスの目的は何ですか?
- 18. jquery.mobile.structureの目的は何ですか?
- 19. オペレータ "^"の目的は何ですか?
- 20. AccountManager(アンドロイド)の目的は何ですか?
- 21. SetDefaultFieldSortScoringの目的は何ですか?
- 22. Dockerビルドコンテキストの目的は何ですか?
- 23. Newtonsoft.Json.JsonToken.StartConstructorトークンの目的は何ですか?
- 24. SDL_opengl_glext.hの目的は何ですか?
- 25. Expressionクラスの目的は何ですか?
- 26. Control.GetPreferredSizeメソッドの目的は何ですか?
- 27. durandalの目的は何ですか?
- 28. Ember.js - Ember.lookupの目的は何ですか
- 29. IEnumeratorの目的は何ですか
- 30. `__metaclass__ = type`の目的は何ですか?
ebp + offsetは関数変数を参照するために使用されます –
関数変数はどういう意味ですか?私はそれが呼び出し規約に依存すると思うが、私の理解は、パラメータがスタックにプッシュされる(したがって、負の参照である)か、またはレジストリに格納されるということです。 –
'[ebp + 4]'は、 'push ebp' /' mov ebp、esp'を実行して関数の先頭に何かを押すと 'call'命令によってプッシュされた戻りアドレスを保持します。 '[ebp + 8]'は最初の(非登録)* arg * /パラメータです。 (ローカル変数ではありません) –