C函数栈帧
x86_64 & x86
函数基本结构
1 |
|
进入新函数的栈帧前,要要将调用函数指令的下一条指令地址压入栈里(调用者的栈帧)。
64位函数栈帧
再调用新函数前
rsp是00
调用新函数后
先把下一条指令的地址:jmp main+175 压入栈
此时rsp是08
因此在新函数栈帧中第一个push前rsp需要是08
若涉及栈对齐问题
可考虑在返回地址处先塞一个 ret 指令的地址
或者跳过第一个push
ret = pop ip(利用栈中的数据切换ip值)
像这种情况(ret2libc)
跳转到plt后
执行完plt中的句子
跳转到puts函数地址
32位函数栈帧
C函数栈帧
http://example.com/2025/03/04/C函数栈帧/