x64参数调用规范

Posted buaawang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了x64参数调用规范相关的知识,希望对你有一定的参考价值。

http://kelvinh.github.io/blog/2013/08/05/windows-x64-calling-conventions/

假设传递的参数的个数为n,那么

当n为奇数时,调用者需要分配0x20+8+(n-1)*8的栈空间

其中,0x20=32,用来保存调用者本地变量RCX, RDX, R8, R9,8字节用来保持栈地址16字节对齐,(n-1)*8大小的空间用来保存参数,按照从右向左的顺序,虽然低0x20大小的空间不使用,这部分参数通过RCX, RDX, R8, R9传递,但仍需要调用者为开始的四个参数分配空间。

当n为偶数时,调用者需要分配0x20+(n-1)*8的栈空间

这里,少了8字节,因为参数的个数为偶数,此时无需额外的8字节便可以保持栈地址16字节对齐

以上是关于x64参数调用规范的主要内容,如果未能解决你的问题,请参考以下文章

使用寄存器而不是堆栈从 x64 程序集调用 C 函数

X86汇编层面的方法调用。

VB.NET 动态 API 调用 x64

调用约定

python 函数调用时传递参数的一些规范

使用 gnu asm 在 x64 中使用参数执行