tutorial smart programar para introduccion inteligentes inteligente ejemplos crear contratos contrato assembly stack 64bit cpu-registers

assembly - smart - programar contratos inteligentes



¿Es necesario reservar espacio de pila para funciones menos de cuatro argumentos? (2)

Acabo de comenzar a aprender el ensamblado de x64 y tengo una pregunta sobre las funciones, los argumentos y la pila. Hasta donde lo entiendo, los primeros cuatro argumentos en una función pasan a los registros rcx, rdx, r8 y r9 (y xmm0-xmm3 para flotadores) en Windows. Así que una función de suma trivial con cuatro parámetros se vería así:

add: mov r10, rcx add r10, rdx add r10, r8 add r10, r9 mov rax, r10 ret

Sin embargo, me he encontrado con documentación que menciona esto :

Como mínimo, cada función debe reservar 32 bytes (cuatro valores de 64 bits) en la pila. Este espacio permite que los registros pasados ​​a la función se copien fácilmente en una ubicación de pila conocida. La función de llamada no es necesaria para derramar los parámetros de registro de entrada a la pila, pero la reserva de espacio de pila garantiza que pueda hacerlo si es necesario.

Entonces, ¿tengo que reservar espacio de pila incluso si las funciones que estoy haciendo toman cuatro parámetros o menos, o es solo una recomendación?


Me acabo de encontrar con esto sin saberlo y parece ser el caso. Las dos primeras instrucciones en GetAsyncKeyState, por ejemplo, sobrescriben la pila por encima del valor de retorno en el área de 0x20 bytes que se supone que debe reservar para que el destinatario la use para los parámetros:

user32.GetAsyncKeyState - mov [rsp+08],rbx user32.GetAsyncKeyState+5- mov [rsp+10],rsi user32.GetAsyncKeyState+A- push rdi user32.GetAsyncKeyState+B- sub rsp,20


Su cotización es de la parte "de la convención de llamadas" de la documentación. Como mínimo, no tiene que preocuparse por esto si no llama a otras funciones desde su código de ensamblaje. Si lo hace, entonces debe respetar, entre otras cosas, la "zona roja" y las consideraciones de alineación de la pila, que la recomendación que cita tiene la intención de garantizar.

EDITAR: esta publicación aclara la diferencia entre "zona roja" y "espacio de sombra".