Por que precisamos de alocação de pilha quando temos uma zona vermelha?
Eu tenho as seguintes dúvidas:
Como sabemos, o System V x86-64 ABI fornece uma área de tamanho fixo (128 bytes) no quadro da pilha, chamada redzone. Portanto, como resultado, não precisamos usar, por exemplo,sub rsp, 12
. Apenas façamov [rsp-12], X
e isso é tudo.
Mas não consigo entender isso. Por que isso Importa? É necessáriosub rsp, 12
sem redzone? Afinal, o tamanho da pilha é limitado no começo, então por quesub rsp, 12
é importante? Eu sei que isso nos permite seguir o topo da pilha, mas vamos ignorá-lo naquele momento.
Eu sei o que algumas instruções usamrsp
valor (comoret
), mas não se importe com isso naquele momento.
O cerne do problema é: não temos zona vermelha e fizemos:
function:
mov [rsp-16], rcx
mov [rsp-32], rcx
mov [rsp-128], rcx
mov [rsp-1024], rcx
ret
Faz diferença com?
function:
sub rsp, 1024
mov [rsp-16], rcx
mov [rsp-32], rcx
mov [rsp-128], rcx
mov [rsp-1024], rcx
add rsp, 1024
ret