我正在学习Windows上的x64汇编以获得“乐趣”。 MSDN documentation for the x64 calling convention on Windows说:



由于我的函数不是非原型(prototype)函数或varargs C/C++函数,这是否意味着我可以始终使用[rsp+8][rsp+32](假设在调用后立即修改rsp的未修改值)用于函数中的通用存储,例如局部变量?

最佳答案

是的,您可以出于任何目的使用入站参数暂存空间。但是您已经知道这一点:修改入站参数的合法性已经隐含了执行此操作的权限。

void somefunction(int arg1)
{
    arg1 = anyvalue; // mov [rsp+8], anyvalue
}

关于assembly - 在Win64 ABI中,可以将保留的参数堆栈空间用于通用存储吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7138347/

10-11 18:43