2021-11-07 · 1

什么是栈帧?

securityreversing

这篇文章发布已超过两年,内容可能已过时。

什么是栈帧(Stack Frame)?

What's the stack frame?


栈帧(Stack Frame)是指函数被调用时,为区分该函数自己的栈区域而产生的区域。这个空间保存与函数相关的局部变量、参数,在函数调用时分配,函数结束时消亡。

函数被调用时,栈里会保存函数的参数、调用结束后要返回的返回地址值、函数中声明的局部变量等。像这样依次保存在栈区域的函数调用信息就叫栈帧(Stack Frame)。多亏这个栈帧,函数调用全部结束后,才能回到该函数被调用之前的状态。

1. 函数序言(Prolog)

push rbp, mov rbp, rsp

!> ****](https://eliez3r.github.io/post/2019/10/16/study-system.Stack-Frame.html)

用 push rbp 把函数的 rbp 保存到栈上。再把 rsp 复制到 rbp,从而把 rsp 设为 rbp 地址。由于 rbp 表示函数的基准点,以 rbp 为基准就能轻松知道 RET、argc、argv、函数局部变量等的位置。## 2. 函数尾声(Epilog) 函数尾声是自己的函数结束再返回时整理栈的过程。就是让它回到原来的状态。旁边用的是 mov eax, 0x0 pop rbp , ret,而 le — study-system.Stack-Frame.html

https://blog.naver.com/hermet/56227646


原文(韩语): tistory — 发布于 2021-11-07,已迁移至本博客。本翻译由 AI 协助完成。

评论

删除这条评论?

相关文章

什么是栈帧? · 나봄하랑