C语言之函数栈帧的创建与销毁讲解(2)(二)

简介: C语言之函数栈帧的创建与销毁讲解(2)

再看下面几个步骤,这里大家再最后几个步骤理解起来有点困难,我这里用通俗易懂的语句给大家解释一下,这里的eax存放的是0CCCCCCCCh这个值,从edi开始向下的ecx里面放的值全部放成CCCCCCCC这个值,这里再强调一遍word--2个字节,dword--4个字节,希望大家能够理解!!!

z=x+y的理解我已经给大家画出图片了,大家看,大家可以尝试着自己去画一下,写一下,这样才能消化变成自己的知识

我把图片放出来,大家可以自己画完过后做参考

注意,在00C21450上面有个高地址ebp(来自于main函数),我的失误没有画上去

讲完了函数栈帧的创建,最后一个部分就是函数栈帧的销毁

看下图

执行一次pop,esp就会往高地址处移动一次

此时我的Add函数内部的CCCCCCCC这一些随机值就没有用了

mov将ebp的值赋值给esp,esp就指向高地址处了,ebp前面的Add函数的函数栈帧就销毁了,希望大家能够理解

然后我们再pop(出栈)一下,ebp就走了,就回到了main函数的低地址,此时我们的esp就来代替edp的位置,希望大家能够理解

最后我们看ret,我们此时回到了低地址处00C21450,这里面的逻辑其实是非常严谨的,我既要走出去也要走回来,我们接着从call指令处开始执行

然后执行add+8就是往高地址处走两步,dword是8个字节,地址往后+2个,这样就把我们形参中a,b给销毁了,是不是很神奇???

最后一步mov,马上就要成功了,大家坚持住,eax的值(Add函数里面的值放到main函数的变量c里面)放到[ebp-20h]这个地址处,此时Add函数的函数栈帧就已经彻底的销毁了,接下来按照相同的步骤实现main函数的函数栈帧的销毁

下来大家可以尝试着去将main函数的函数栈帧实际操作一遍,结合博客(1)自己操作一下

全章终,我也是一个菜鸟,希望能把我所理解的讲给大家,希望大家能听懂一大部分,谢谢支持!!!

相关文章
|
10月前
|
存储 安全 C语言
深度剖析c语言程序 -- 函数栈帧的创建和销毁(纯肝货)-2
深度剖析c语言程序 -- 函数栈帧的创建和销毁(纯肝货)-2
102 0
|
10月前
|
存储 编译器 C语言
深度剖析c语言程序 -- 函数栈帧的创建和销毁(纯肝货)-1
深度剖析c语言程序 -- 函数栈帧的创建和销毁(纯肝货)-1
112 0
|
10月前
|
存储 编译器 程序员
C语言之反汇编查看函数栈帧的创建与销毁(一)
C语言之反汇编查看函数栈帧的创建与销毁(一)
C语言之反汇编查看函数栈帧的创建与销毁(一)
|
7月前
|
存储 C语言
【C语言】——函数栈帧的创建与销毁
【C语言】——函数栈帧的创建与销毁
|
10月前
|
存储 编译器 C语言
C语言:底层剖析——函数栈帧的创建和销毁
C语言:底层剖析——函数栈帧的创建和销毁
|
10月前
|
存储 编译器 程序员
C语言之反汇编查看函数栈帧的创建与销毁(二)
C语言之反汇编查看函数栈帧的创建与销毁(二)
|
编译器 C语言
函数栈帧的创建和销毁(以C语言代码为例,汇编代码的角度分析)(下)
函数栈帧的创建和销毁(以C语言代码为例,汇编代码的角度分析)
|
2月前
|
存储 算法 C语言
【C语言程序设计——函数】素数判定(头歌实践教学平台习题)【合集】
本内容介绍了编写一个判断素数的子函数的任务,涵盖循环控制与跳转语句、算术运算符(%)、以及素数的概念。任务要求在主函数中输入整数并输出是否为素数的信息。相关知识包括 `for` 和 `while` 循环、`break` 和 `continue` 语句、取余运算符 `%` 的使用及素数定义、分布规律和应用场景。编程要求根据提示补充代码,测试说明提供了输入输出示例,最后给出通关代码和测试结果。 任务核心:编写判断素数的子函数并在主函数中调用,涉及循环结构和条件判断。
84 23
|
18天前
|
人工智能 Java 程序员
一文彻底搞清楚C语言的函数
本文介绍C语言函数:函数是程序模块化的工具,由函数头和函数体组成,涵盖定义、调用、参数传递及声明等内容。值传递确保实参不受影响,函数声明增强代码可读性。君志所向,一往无前!
18 1
一文彻底搞清楚C语言的函数
|
2月前
|
算法 C语言
【C语言程序设计——函数】利用函数求解最大公约数和最小公倍数(头歌实践教学平台习题)【合集】
本文档介绍了如何编写两个子函数,分别求任意两个整数的最大公约数和最小公倍数。内容涵盖循环控制与跳转语句的使用、最大公约数的求法(包括辗转相除法和更相减损术),以及基于最大公约数求最小公倍数的方法。通过示例代码和测试说明,帮助读者理解和实现相关算法。最终提供了完整的通关代码及测试结果,确保编程任务的成功完成。
104 15