gpt4 book ai didi

c - 可变参数和 x64

转载 作者:太空宇宙 更新时间:2023-11-03 23:43:18 24 4
gpt4 key购买 nike

va_arg\va_start\va_list\va_end 宏在 x64 中是如何工作的?

i386 中的调用约定在堆栈上传递参数,因此宏只是递增一些指向堆栈基址的指针并将其转发。然而,在 x64 中,所有参数都是通过寄存器传递的……那么那里发生了什么?被调用函数如何知道哪些寄存器用于传递参数以确保它不会破坏它们?

最佳答案

这是由架构的 ABI 定义的。在 amd64 的 SysV ABI 上(除了 Windows 之外几乎所有的东西),ABI document说(第 56 页及以后):

The prologue of a function taking a variable argument list and known to call the macro va_start is expected to save the argument registers to the register save area.

然后 va_list 是一个结构体,带有指向寄存器保存区域的指针和堆栈上可能已传递一些额外参数的位置(并非所有函数参数都适合寄存器)。

关于c - 可变参数和 x64,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40216160/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com