¿Por qué necesitamos asignación de pila cuando tenemos una zona roja?
Tengo las siguientes dudas:
Como sabemos, System V x86-64 ABI nos da un área de tamaño fijo (128 bytes) en el marco de la pila, llamada redzone. Entonces, como resultado, no necesitamos usar, por ejemplo,sub rsp, 12
. Solo hazlomov [rsp-12], X
y eso es todo.
Pero no puedo entender la idea de eso. ¿Por qué eso importa? ¿Es necesariosub rsp, 12
sin redzone? Después de todo, el tamaño de la pila es limitado al principio, ¿por qué?sub rsp, 12
¿es importante? Sé que nos permite seguir la parte superior de la pila, pero ignorémoslo en ese momento.
Sé lo que usan algunas instruccionesrsp
valor (comoret
) pero no me importa en ese momento.
El quid del problema es: no tenemos zona roja y hemos hecho:
function:
mov [rsp-16], rcx
mov [rsp-32], rcx
mov [rsp-128], rcx
mov [rsp-1024], rcx
ret
¿Es la diferencia con?
function:
sub rsp, 1024
mov [rsp-16], rcx
mov [rsp-32], rcx
mov [rsp-128], rcx
mov [rsp-1024], rcx
add rsp, 1024
ret