33

ウィキペディアから:

コンピューティングでは、レッド ゾーンは、その関数によって保持されない戻りアドレスを超えた、関数のスタック フレーム内の固定サイズの領域です。呼び出し先関数は、スタック ポインターを変更する余分なオーバーヘッドなしで、ローカル変数を格納するためにレッド ゾーンを使用できます。このメモリ領域は、割り込み/例外/シグナル ハンドラによって変更されません。System V で使用される x86-64 ABI では、128 バイトのレッド ゾーンが義務付けられています。レッド ゾーンは、リターン アドレスの直後から始まり、関数の引数が含まれます。OpenRISC ツールチェーンは、128 バイトのレッド ゾーンを想定しています。

System V x86-64 ABIから:

%rspが指す場所を超える 128 バイトの領域は、予約されていると見なされ、シグナルまたは割り込みハンドラによって変更されません。したがって、関数は、関数呼び出し間で必要のない一時データのためにこの領域を使用する場合があります。特に、リーフ関数は、プロローグとエピローグでスタック ポインターを調整するのではなく、スタック フレーム全体にこの領域を使用する場合があります。このエリアはレッドゾーンとして知られています。

  • これら 2 つの引用符が与えられた場合、レッド ゾーン は積み上げられた返品先住所の上ですか、それとも積み上げられた返品先住所のですか?

  • このレッド ゾーンは に対して相対的なので、それぞれでRSP下に移動し、それぞれpushで上に移動しますpopか?

4

2 に答える 2

25

これら 2 つの引用符が与えられた場合、レッド ゾーンは積み上げられた返品先住所の上ですか、それとも積み上げられた返品先住所の下ですか?

レッド ゾーンは、そのすぐ下の 128 バイトrsp、つまりrsp - 128torsp - 1です。

このレッド ゾーンは RSP に関連しているため、押すたびに下に移動し、ポップするたびに上に移動しますか?

はい。

于 2016-06-26T19:18:06.427 に答える