golang-notes icon indicating copy to clipboard operation
golang-notes copied to clipboard

问题 伪寄存器在函数调用前后是如何恢复现场的

Open zhaozy93 opened this issue 4 years ago • 2 comments

C系语言中,调用函数把硬件寄存器BP值写入栈中,被调用函数ret后,读取当前bp加固定位移得到调用函数的硬件寄存器BP值,即可恢复现场,看plan9的文章对4个伪寄存器并没有进行类似操作。 请问 伪寄存器在函数调用前后是如何恢复现场的?

zhaozy93 avatar May 09 '21 13:05 zhaozy93

或者说 不需要恢复现场 伪SP和伪BP可以通过硬件寄存器的BP计算出来?

zhaozy93 avatar May 09 '21 13:05 zhaozy93

BP 在 callee 的 framesize 大小 > 0 的时候也是会在栈上存的 ret 的流程和其他语言应该是一样的

另外,伪寄存器编译后都会转成真实的物理寄存器,不会在最终生成的汇编代码中有任何伪寄存器的

cch123 avatar May 10 '21 20:05 cch123