这种调用规范保存和恢复寄存器是函数做还是调用者做
时间: 2024-04-17 07:27:55 浏览: 282
函数调用中堆栈的个人理解共4页.pdf.zip
在 C calling convention 中,寄存器的保存和恢复通常是由函数来完成的,而不是调用者。根据规范,函数在被调用时会保存可能被修改的寄存器的值,并在函数返回时恢复这些寄存器的值,以确保调用者的寄存器状态不会被破坏。
具体来说,根据调用规范,一般来说,函数需要保存并恢复以下寄存器的值:一般用于传递函数参数的寄存器(如 eax、edx、ecx 等),栈指针寄存器(如 esp、rsp 等),基址寄存器(如 ebp、rbp 等),帧指针寄存器(如 ebp、rbp 等),返回地址寄存器(如 eip、rip 等),以及其他可能被函数使用的寄存器。
通过将寄存器值保存到栈上,并在函数返回前从栈上恢复这些值,可以确保函数的执行不会对调用者的寄存器状态产生影响。这种方式也有助于实现函数的嵌套调用和正确处理异常情况。
阅读全文