コールスタック上に、プロシージャへの引数の位置と前のフレームへのポインタのアドレスを与えるフレームポインタがあります。また、返信先住所もあります。なぜそれは返還アドレスが必要ですか?私たちが行ったようにスタックフレームをポップするだけで、フレームポインタをスタックにバックアップすることはできませんか?リターンアドレスは単なる最適化ですか?返信先住所が必要なのはなぜですか?
0
A
答えて
2
リターンアドレスが前のスタックフレームを指していない場合は、呼び出し元のメソッドの次の命令のコードセグメントを指します。
+0
「コードセグメントに」 - >これは私の睡眠が脳を奪われたことを思い起こさせ、私がどのように愚かなのかを思い起こさせるものでした。ありがとう! –
0
フレームは、パラメータとローカル変数の格納領域を指します。これを元の状態に戻すことはできますが、関数への呼び出しが行われたときに古い値が失われた命令ポインタは復元されません。
リターンアドレスは、保存された命令ポインタです。
1
復帰アドレスは、関数呼び出しがそのスタックを作成したコードセグメントまたは命令のアドレスを指します。バッファオーバーランの場合と同様に、脆弱性ごとに非常に重要なデータです。攻撃者は状態を損なう可能性があるアドレス空間を得ます。
関連する問題
- 1. PayPalのWeb Payments Proに請求先住所が必要ですか?
- 2. phpの連絡フォームの返信先住所
- 3. フィジカルウェブに場所が必要なのはなぜですか?
- 4. イギリスの郵便番号Google APIが返信しない住所:
- 5. Magentoで請求先住所と配送先住所の配列を返す方法は?
- 6. 請求先住所WooCommerceデータベーステーブル
- 7. 請求先住所の要求が商人
- 8. 繰り返しアカウントの請求先住所を更新する
- 9. WordPressプラグイン - WooCommerceでの配送先住所
- 10. ストライプ:配送先住所がノード/エクスプレスで送信されていません
- 11. データベースなしで連絡先/住所タイプを保存するのに最適なフォーマットは何ですか?
- 12. PEにはオリジナルファーストサンク(OFT)が必要なのはなぜですか?
- 13. コードファーストクラスにはナビゲーションプロパティが必要なのはなぜですか?
- 14. ここでエンディアンが必要なのはなぜですか?
- 15. Dockerでベースイメージが必要なのはなぜですか?
- 16. Railsでattr_accessorが必要なのはなぜですか?
- 17. JavaでPropertiesクラスが必要なのはなぜですか?
- 18. JavaでString [] argsが必要なのはなぜですか?
- 19. lexでルールが必要なのはなぜですか?
- 20. ここでコンテキストが必要なのはなぜですか?
- 21. JSでプロミスが必要なのはなぜですか
- 22. F#関数でカッコが必要なのはなぜですか?
- 23. ここでキャストが必要なのはなぜですか?
- 24. C++ 11でweak_ptrが必要なのはなぜですか?
- 25. ここでtypenameが必要なのはなぜですか?
- 26. Pythonで「finally」節が必要なのはなぜですか?
- 27. Fluxでディスパッチャが必要なのはなぜですか?
- 28. Redexで評価コンテキストが必要なのはなぜですか?
- 29. selectステートメントでINTO句が必要なのはなぜですか?
- 30. ここでロックが必要なのはなぜですか?
戻りアドレスには、復帰する命令のアドレスが含まれます。他の場所には格納されません。 – Jester
フレームポインタは一般的に以前のスタックポインタです。リターンアドレスは前の命令ポインタです。 –
フレームはオプションです。フレームポインタはオプションです。戻りアドレスはオプションではありません。また、分岐予測を改善するためにプロセッサ内部で大幅に最適化されています。 –