Estoy aprendiendo el ensamblaje x64 en Windows para 'divertirme'. El MSDN documentation for the x64 calling convention on Windows dice:En Win64 ABI, ¿se puede usar el espacio de pila de argumentos reservados para el almacenamiento de uso general?
la persona que llama es responsable de asignar espacio de parámetros al destinatario de la llamada, y siempre debe asignar espacio suficiente para los 4 parámetros de registro, incluso si el destinatario de la llamada no tiene esa cantidad de parámetros. Esto ayuda en la simplicidad de soportar funciones sin prototipo C y funciones vararg C/C++.
Como mis funciones no son funciones de C unprototyped o varargs C/C funciones ++, ¿significa que siempre se puede utilizar [rsp+8]
-[rsp+32]
(suponiendo un valor no modificada de rsp
justo después de una llamada) para el almacenamiento de propósito general dentro de mi función , como para las variables locales?
Gracias por la respuesta clara. Sin embargo, la modificación de los parámetros de entrada sería más bien 'mov rcx, anyvalue' ya que el argumento se pasa a través de' rcx', por lo que no estaba seguro de '[rsp + 8]'. – Trillian
Pero también se le permite derramar los parámetros de entrada. Es por eso que el espacio reservado está allí, después de todo. 'void somefunction (int arg1) {/ * spill: mov [rsp + 8], rcx */arg1 = anyvalue;/* mov [rsp + 8], anyvalue * /} ' –