我正在学习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 * /}' –