-
-
[原创]02 C语言-嵌套函数的栈空间布局
-
发表于:
2021-3-23 15:56
9238
-
前言
该文章主要描述说明C语言Debug环境下,函数调用函数它的内存布局是如何的一样状态。
首先,我们先简单说明一下上述代码,程序会在main() 位置开始执行,执行到“c = b(1,2,3)”会调用b()函数,在b()函数内部又调用了a()函数。最终,执行的值放入变量c当中。
接下来,我们先将内存布局图画出来,然后在逐步分析为什么会产生这样的内存布局。如果不了解如何画出内存布局,可以参考我之前的文章。连接如下:https://bbs.pediy.com/thread-266576.htm
接下来,我们来具体分析一下这张图,我们,我们先将程序使用OD打开,并且定位到地址“00881858”位置。详细如下图:
该位置执行了三个push 指令以及一个call 指令,完成了参数的传递以及函数的调用。执行完成栈空间的状态如下图。此时我们发现b()函数的参数已经进入栈中,并且b()函数的返回地址已经压入栈区。
执行完call 指令,代码定位到如下图位置。此时,会执行保存上个栈底,初始化新的b()函数的栈帧,划分cc大小的缓冲区,初始化缓冲区为cc指令以及保存环境的操作。
上述红框当中代码执行完成之后,栈空间状态如下图:
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2021-3-23 16:24
被天象独行编辑
,原因: