我正在學習Windows上的x64程序集以獲得「樂趣」。該MSDN documentation for the x64 calling convention on Windows說:在Win64 ABI中,保留的參數堆棧空間是否可用於通用存儲?
調用者負責爲參數到被叫分配空間,必須始終分配足夠的空間爲4個寄存器參數,即使被叫方不具有如此之多的參數。這有助於支持C unprototyped函數和vararg C/C++函數的簡單性。
由於我的功能不是C unprototyped功能或可變參數C/C++函數,這意味着什麼我可以隨時我的函數內使用[rsp+8]
到[rsp+32]
(假設rsp
未修飾的值的調用後右)通用存儲,像局部變量一樣?
感謝您的明確答案。但是,由於參數是通過'rcx'傳遞的,所以修改入站參數應該是'mov rcx,anyvalue',這就是爲什麼我不確定'[rsp + 8]'。 – Trillian
但你也被允許泄漏入站參數。畢竟,這就是爲什麼預留的空間在那裏。 'void somefunction(int arg1){/ * spill:mov [rsp + 8],rcx */arg1 = anyvalue;/* mov [rsp + 8],anyvalue * /}' –