You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows x64下RBP设置方式及栈帧指针定位等问题咨询

RBP设置方式与Windows x64栈帧疑问

是否存在不同的RBP设置方式?为什么Windows x64不将RBP指向返回地址正下方的已保存RBP?

MSDN通过以下图片说明x64 fastcall调用约定下的栈使用方式:
Windows 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 02:48:21