Sto imparando l'assembly x64 su Windows per "divertimento". Il MSDN documentation for the x64 calling convention on Windows dice:Nell'ABI Win64, è possibile utilizzare lo spazio di stack degli argomenti riservati per l'archiviazione generica?
Il chiamante è responsabile per l'allocazione dello spazio per i parametri per il chiamato, e deve sempre allocare lo spazio sufficiente per i parametri 4 registri, anche se il chiamato non ha che molti parametri. Questo aiuta nella semplicità del supporto delle funzioni non prototipate C e delle funzioni vararg C/C++.
Poiché le funzioni non sono funzioni C senza prototipo o varargs C/C++ funzioni, questo significa che posso sempre usare [rsp+8]
a [rsp+32]
(assumendo un valore non modificato di rsp
subito dopo una chiamata) per la memorizzazione di uso generale nel mio funzione , come per le variabili locali?
Grazie per la risposta chiara. Comunque la modifica dei parametri in entrata sarebbe piuttosto 'mov rcx, anyvalue' dato che l'argomento è passato tramite 'rcx', motivo per cui non ero sicuro di' [rsp + 8] '. – Trillian
Ma ti è anche permesso di versare i parametri in entrata. Ecco perché lo spazio riservato è lì, dopo tutto. 'void somefunction (int arg1) {/ * spill: mov [rsp + 8], rcx */arg1 = anyvalue;/* mov [rsp + 8], qualsiasi valore * /} ' –