函数栈帧的创建与销毁-(基于C语言的VS2019研究)

简介: 这里对于寄存器不进行深入探究,只需知道寄存器分为以下8种。

(1)寄存器


这里对于寄存器不进行深入探究,只需知道寄存器分为以下8种。600a1109c0ad48fc8d5f583d83a415de.png

其中EBP和ESP两个寄存器存放的是地址,这两个地址是用来维护函数栈帧的

EBP:栈底指针

ESP:栈顶指针


(2)函数调用都是在栈上创建空间的。

b6fe3d67fb484bc396f8b4deff41b839.png

(3)栈都是从高地址往低地址分配内存的


(4)函数栈帧的创建和销毁是基于栈所实现的


所谓栈,是一种数据结构,具有先进后出的特点。在函数栈帧创建过程中,内存从高地址开始使用,越后面创建的函数栈帧或压栈数据,所存储的空间地址越低。


(5)main函数是会被其他函数调用的,在不同编译器中调用main的函数也不同


在VS2019中:

先点击逐语句————>再按下 crtl+ alt+c,完成调用堆栈窗口调出

78dc575c8e4449ebbb836808e2b99a08.png

e1075ce93dcb424e9cea121184188029.png

此时可以看到main函数被调用了


3.函数栈帧创建与销毁的过程


以如下的加法函数代码块来演示C语言在vs2013上的过程:

#include <stdio.h>
int add(int x, int y)
{
  int t;
  t = x + y;
  return t;
}
int main()
{
  int a = 1;
  int b = 2;
  int c = 0;
  c = add(a, b);
  printf("%d\n",c);
  return 0;
}



相关文章
|
8天前
|
存储 安全 C语言
深度剖析c语言程序 -- 函数栈帧的创建和销毁(纯肝货)-2
深度剖析c语言程序 -- 函数栈帧的创建和销毁(纯肝货)-2
|
8天前
|
存储 编译器 C语言
深度剖析c语言程序 -- 函数栈帧的创建和销毁(纯肝货)-1
深度剖析c语言程序 -- 函数栈帧的创建和销毁(纯肝货)-1
|
8天前
|
存储 编译器 程序员
C语言之反汇编查看函数栈帧的创建与销毁(一)
C语言之反汇编查看函数栈帧的创建与销毁(一)
C语言之反汇编查看函数栈帧的创建与销毁(一)
|
8天前
|
存储 C语言 索引
C语言多维数组名作函数参数的研究
C语言多维数组名作函数参数的研究
11 0
|
8天前
|
存储 编译器 C语言
C语言:底层剖析——函数栈帧的创建和销毁
C语言:底层剖析——函数栈帧的创建和销毁
|
8天前
|
存储 编译器 C语言
C 语言函数栈帧的概念讲解
C 语言函数栈帧的概念讲解
34 0
|
8天前
|
存储 编译器 程序员
C语言之反汇编查看函数栈帧的创建与销毁(二)
C语言之反汇编查看函数栈帧的创建与销毁(二)
|
5月前
|
编译器 C语言
函数栈帧的创建和销毁(以C语言代码为例,汇编代码的角度分析)(下)
函数栈帧的创建和销毁(以C语言代码为例,汇编代码的角度分析)
|
1天前
|
C语言
c语言:字符串和内存函数介绍-2
c语言:字符串和内存函数介绍
5 0
|
1天前
|
C语言
c语言:字符串和内存函数介绍-1
c语言:字符串和内存函数介绍
8 0