函数栈帧的创建与销毁(下)

简介: 笔记

调用Add函数


20.png对函数进行传参,创建俩个临时变量,然后压栈进去


21.png22.png


接下来进入call开始调用函数call此时的地址是00C2144B


23.png


此时按下F11,我们发现call指令的下一条地址被压到了栈区

24.png

把call的下一个地址压栈,ps:后面会用到这条指令,可先放在这不管

25.png

接下来进入Add函数,跟前面main函数一样,先开辟空间,然后赋值为CCCCCC,再为变量在函数里创建空间并赋值

26.png


接下来执行加法运算,由于刚才已经创建好了零时变量,所以把他俩进行相加,加完之后把结果传过来就行,传过来之后把这个值放在eax里面去

27.png

返回主函数


按顺序出栈,之后把ebp赋值给esp

28.png29.png30.png

之后pop,ebp把ebp进行出栈,ebp便回到main函数这里,ebp此时回到这里,esp也自然而然的往下指一个,ret指令是返回,然后esp来到了call指令的下一条指令

31.png32.png

把栈顶指针弹出去,esp自然向下指一条

33.png34.png

之后给esp加8即释放这俩个临时变量

35.png

之后把eax放到ebp-20h,eax是存放刚才加法和的地方

36.png

相关文章
|
6月前
|
编译器
函数栈帧的创建和销毁
函数栈帧的创建和销毁
32 0
|
7月前
|
存储 编译器 容器
函数栈帧的创建和销毁讲解
函数栈帧的创建和销毁讲解
48 0
|
7月前
|
编译器 容器
关于函数栈帧的创建和销毁
关于函数栈帧的创建和销毁
|
存储
函数栈帧的创建和销毁(下)
函数栈帧的创建和销毁(下)
55 0
|
7月前
|
容器
函数栈帧的创建和销毁介绍
函数栈帧的创建和销毁介绍
44 0
|
7月前
|
存储 编译器
初识函数栈帧的创建与销毁(笔记)
初识函数栈帧的创建与销毁(笔记)
|
编译器 程序员 C语言
函数栈帧的创建与销毁(超详解)
函数栈帧的创建与销毁(超详解)
116 0
|
存储 缓存 编译器
函数栈帧的创建与销毁
函数栈帧的创建与销毁
45 0
|
存储 C语言 C++
你知道函数栈帧的创建和销毁吗?
你知道函数栈帧的创建和销毁吗?
78 0
|
存储 编译器 C++
深入理解内存 —— 函数栈帧的创建与销毁
深入理解内存 —— 函数栈帧的创建与销毁
133 0