次の疑問があります。
私たちが知っているように、System V x86-64 ABI は、スタック フレーム内に約固定サイズ (128 バイト) の領域、いわゆるレッドゾーンを提供します。したがって、結果として、たとえば を使用する必要はありませんsub rsp, 12
。作るだけmov [rsp-12], X
、それだけです。
しかし、私はその考えを理解することはできません。なぜそれが重要なのですか?sub rsp, 12
レッドゾーンなしにする必要はありますか?結局のところ、最初はスタック サイズが限られているのに、なぜsub rsp, 12
重要なのでしょうか? スタックの一番上を追跡できることはわかっていますが、その時点では無視しましょう。
rsp
一部の命令が値 ( など)を使用することは知っていret
ますが、その瞬間は気にしません。
問題の核心は次のとおりです。レッドゾーンはありません。
function:
mov [rsp-16], rcx
mov [rsp-32], rcx
mov [rsp-128], rcx
mov [rsp-1024], rcx
ret
との違いは?
function:
sub rsp, 1024
mov [rsp-16], rcx
mov [rsp-32], rcx
mov [rsp-128], rcx
mov [rsp-1024], rcx
add rsp, 1024
ret