Win64与Linux-x86_64调用约定下未使用寄存器是否被修改问题咨询
Win64 调用约定问题解答
问题1
微软官方的x64调用约定规则里,前四个参数对应的RCX、RDX、R8、R9都属于调用者保存寄存器,和函数实际用到多少个参数无关:
- 被调用的函数没有义务保留这四个寄存器的原有值,内部可以随意占用修改
- 哪怕你调用的是只需要1个参数的
ExitProcess,RDX、R8、R9的值在函数返回后也会被修改,不能默认保留。如果你需要保存这几个寄存器的内容,必须在调用函数前主动压栈存储,调用返回后再手动恢复。
只有RBX、RBP、RDI、RSI、RSP以及R12~R15属于被调用者必须保留值的寄存器,函数返回后这些寄存器的值和调用前一致。
内容的提问来源于stack exchange,提问作者HelloMachine
相关产品推荐
相关产品推荐

