在 C 中使用堆栈传递给函数的参数
Arguments passed to function using stack in C
函数的参数是否总是根据 ABI 使用堆栈传递?
谢谢。
是的,函数的参数始终使用堆栈传递。这就是为什么如果您要传递大的东西,建议传递一个指针以避免堆栈溢出。
ABI 或应用程序二进制接口涵盖了二进制代码片段之间契约中的各种细节。
(广义定义)——它定义了调用函数的机制、调用者和被调用者之间如何传递参数、如何向调用者提供 return 值、库如何实现,以及程序如何加载到内存中。
(具体)调用约定,它控制函数参数的传递方式和return值的检索方式;例如,是所有参数都入栈还是部分入寄存器,哪些寄存器用于哪些函数参数,第一个入栈的函数参数是否先入栈或最后入栈。
一个实例 - 参考 ARM ABI 提到的调用约定 Procedure Call Standard for ARM Architecture - 你可以参考堆栈部分(第 16 页末尾) - 堆栈是一个连续的内存区域,可用于存储局部变量和传递
当可用参数寄存器不足
时子例程的附加参数
函数的参数是否总是根据 ABI 使用堆栈传递?
谢谢。
是的,函数的参数始终使用堆栈传递。这就是为什么如果您要传递大的东西,建议传递一个指针以避免堆栈溢出。
ABI 或应用程序二进制接口涵盖了二进制代码片段之间契约中的各种细节。
(广义定义)——它定义了调用函数的机制、调用者和被调用者之间如何传递参数、如何向调用者提供 return 值、库如何实现,以及程序如何加载到内存中。
(具体)调用约定,它控制函数参数的传递方式和return值的检索方式;例如,是所有参数都入栈还是部分入寄存器,哪些寄存器用于哪些函数参数,第一个入栈的函数参数是否先入栈或最后入栈。
一个实例 - 参考 ARM ABI 提到的调用约定 Procedure Call Standard for ARM Architecture - 你可以参考堆栈部分(第 16 页末尾) - 堆栈是一个连续的内存区域,可用于存储局部变量和传递 当可用参数寄存器不足
时子例程的附加参数