目录一、什么是函数栈帧 1.寄存器:2.函数栈帧 3.栈帧的作用和维护 4.栈帧结构二、函数栈帧的创建1.汇编代码2.main函数 2.栈帧创
eax, ebx, ecx ...
ebp
- 存放了指向函数栈帧栈底的地址
esp
- 存放了指向函数栈帧栈顶的地址
函数被调用时,系统会在栈区为该函数开辟一块栈空间,这个栈空间就是该函数的函数栈帧。
以main函数的调用为例
栈帧也叫过程活动记录,是编译器用来实现函数调用过程的一种数据结构。从逻辑上讲,栈帧为一个函数提供了执行环境。
栈是先用高地址再用低地址,栈帧控制和保存了一个函数所需要的各种信息。
栈帧的维护离不开ebp和esp寄存器,ebp存放了指向栈帧的栈底地址的指针,esp则存放指向栈顶地址的指针。
以main函数为例:
环境为VS2019
#include<stdio.h>
int ADD(int x, int y)
{
int z=0;
z=x+y;
return z;
}
int main()
{
int a = 10;
int b = 20;
int c = 0;
c = ADD(a, b);
return 0;
}
要研究函数栈帧我们要研究c程序的汇编代码。如图所示:
main函数的函数栈帧的创建和数据初始化就完成了。
add函数栈帧的创建和main函数栈帧创建是一样的,值得注意的是,ADD函数执行结束后的返回值保存在了寄存器eax中,就是避免ADD函数栈帧销毁时,主函数无法访问ADD返回值。由此可见函数返回值是如何返回的。
4.函数执行结束后系统进行了什么操作
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容
--结束END--
本文标题: C语言函数栈帧解析
本文链接: https://www.lsjlt.com/news/134855.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0