Warum benötigen wir die Stapelzuordnung, wenn wir eine rote Zone haben?

Ich habe folgende Zweifel:

Wie wir wissen, gibt uns System V x86-64 ABI einen Bereich mit fester Größe (128 Byte) im Stack-Frame, die sogenannte Redzone. Aus diesem Grund müssen wir beispielsweise nicht @ verwendesub rsp, 12. Mach einfachmov [rsp-12], X und das ist alles

Aber ich kann nicht begreifen, dass. Warum spielt es eine Rolle? Ist es notwendig,sub rsp, 12 ohne redzone? Immerhin ist die Stapelgröße am Anfang begrenzt, warum alsosub rsp, 12 ist wichtig? Ich weiß, dass es uns möglich ist, der Spitze des Stapels zu folgen, aber lassen Sie es uns in diesem Moment ignorieren.

Ich weiß, was einige Anweisungen verwendenrsp value (wieret) aber kümmert es nicht in diesem Moment.

er Kern des Problems ist: Wir haben keine redzone und wir haben getan:

function:
    mov [rsp-16], rcx
    mov [rsp-32], rcx
    mov [rsp-128], rcx
    mov [rsp-1024], rcx
    ret

Ist es ein Unterschied zu?

function:
    sub rsp, 1024
    mov [rsp-16], rcx
    mov [rsp-32], rcx
    mov [rsp-128], rcx
    mov [rsp-1024], rcx
    add rsp, 1024
    ret

Antworten auf die Frage(4)

Ihre Antwort auf die Frage