Windows x64下RBP设置方式及栈帧指针定位等问题咨询
RBP设置方式与Windows x64栈帧疑问
是否存在不同的RBP设置方式?为什么Windows x64不将RBP指向返回地址正下方的已保存RBP?
MSDN通过以下图片说明x64 fastcall调用约定下的栈使用方式:
我的疑问是:为何栈帧指针被设置在箭头所示的位置?毕竟我原本期望函数调用后执行以下标准栈帧构建/销毁代码:
push rbp mov rbp, rsp ; 为局部变量、寄存器及栈参数区域分配栈内存 ; 函数执行逻辑 mov rsp, rbp pop rbp ret
按照我的理解,访问B函数的参数区域应该是这样:
mov [rbp + 10h], rcx mov [rbp + 18h], rdx mov [rbp + 20h], r8 mov [rbp + 28h], r9
访问局部变量的方式为:
mov [rbp - 8h], 1 mov [rbp - 10h],2 ; 等等
而访问后续调用函数的参数区域的方式为:
; rcx、rdx、r8、r9用于传递前4个参数 mov [rsp + 20h], 1 ; 第五个参数,首个栈传参数 等等
上述理解是否正确?还是我存在误解?
内容的提问来源于stack exchange,提问作者mantissa
相关产品推荐
相关产品推荐

