Arm64架构在函数调用时,会不会把上一个函数的参数存储在栈帧中
时间: 2024-04-05 17:32:07 浏览: 20
在 ARM64 架构下,函数参数通常是通过通用寄存器(General Purpose Registers)来传递的,而不是通过栈。ARM64 有 31 个通用寄存器,其中 x0 到 x7 用于传递函数参数。如果函数的参数超过了 8 个,多余的参数则需要通过栈来传递。
在函数调用时,调用者会先将函数参数存储在通用寄存器中,然后将返回地址和栈帧指针先入栈,最后跳转到被调用函数的入口地址。在被调用函数内部,被调用函数会从寄存器中读取参数值,并执行相应的操作。
因此,在 ARM64 架构下,上一个函数的参数通常不会存储在栈帧中,而是存储在通用寄存器中。栈帧中存储的是上一个函数的栈帧指针、返回地址和局部变量等信息。
需要注意的是,如果函数参数超过了 8 个,多余的参数则需要通过栈来传递。在这种情况下,被调用函数会从栈中读取参数值,并执行相应的操作。同时,如果函数调用时使用了不同的 ABI(Application Binary Interface),则可能会影响函数参数的传递方式和存储位置。
相关问题
Arm64函数调用时会把参数保存在寄存器中吗
是的,Arm64函数调用时会把参数保存在寄存器中。具体来说,前6个参数会分别保存在寄存器x0~x5中,如果参数数量超过6个,则会把额外的参数保存在栈中。如果函数返回值为整型或指针类型,则会把返回值保存在寄存器x0中,如果返回值为浮点型,则会把返回值保存在寄存器v0中。
需要注意的是,函数调用前,调用方需要按照函数的参数顺序将参数值依次保存在对应的寄存器中或栈中。如果有参数需要通过指针传递,则需要将指针地址保存在寄存器中或栈中,然后将指针地址作为参数传递给函数。在函数内部,根据参数的类型和数量,可以通过寄存器或栈中的地址来获取参数值。
11.ARM系统中,在函数调用的时候,参数是通过哪种方式传递的?
在ARM系统中,在函数调用时,参数可以通过以下两种传递方式之一进行传递:
1. 寄存器传递:前四个参数可以通过r0、r1、r2和r3寄存器进行传递。如果有更多的参数,则必须通过堆栈进行传递。
2. 堆栈传递:如果参数个数超过四个,或者参数的长度超过一个寄存器的长度,则必须通过堆栈进行传递。在堆栈上为参数分配空间,并将参数的值复制到堆栈空间中。然后将堆栈指针(sp)向下移动,以便指向下一个参数。