打印
[疑难问答]

函数栈帧的创建和销毁

[复制链接]
楼主: pixhw
手机看帖
扫描二维码
随时随地手机跟帖
21
macpherson| | 2024-8-18 19:54 | 只看该作者 回帖奖励 |倒序浏览
如果函数有参数,这些参数会被按照特定的顺序(通常是从右到左)压入栈中,或者通过寄存器传递。

使用特权

评论回复
22
10299823| | 2024-8-18 20:33 | 只看该作者
更新栈指针寄存器(如esp),使其指向新创建的栈帧的顶部。

使用特权

评论回复
23
gygp| | 2024-8-19 07:50 | 只看该作者
函数内部的局部变量需要在栈上分配空间。栈指针(SP)会向下移动,为局部变量分配所需的空间。

使用特权

评论回复
24
yangxiaor520| | 2024-8-19 08:07 | 只看该作者
说到汇编就有点头大了,忘的差不多了。

使用特权

评论回复
25
tabmone| | 2024-8-19 22:09 | 只看该作者
在调用栈上分配一块内存区域,这块区域的大小取决于函数的参数、局部变量以及返回地址的大小。

使用特权

评论回复
26
1988020566| | 2024-8-20 08:57 | 只看该作者
将调用时保存的返回地址从栈中弹出,并将这个地址加载到程序计数器(如EIP)中,以便继续执行调用者函数的下一条指令。

使用特权

评论回复
27
uptown| | 2024-8-20 14:16 | 只看该作者
函数的参数和局部变量只在栈帧中存在,不会影响全局作用域或其他函数。

使用特权

评论回复
28
robertesth| | 2024-8-20 18:51 | 只看该作者
CPU会更新栈指针,将其向下移动足够的空间来容纳新的栈帧。这通常意味着从SP减去所需的字节数。
新的空间包括:
函数参数:传递给函数的参数。
局部变量:函数内部声明的变量。
返回地址:函数调用之后应该返回的指令地址。
其他临时变量或保存的寄存器值。

使用特权

评论回复
29
yangxiaor520| | 2024-8-21 08:06 | 只看该作者
堆栈是CPU自动管理的吧

使用特权

评论回复
30
bartonalfred| | 2024-8-21 16:12 | 只看该作者
将函数调用之后的指令地址(即函数调用后的下一条指令)放入栈帧,以便函数执行完毕后能够正确返回到调用处。

使用特权

评论回复
31
sesefadou| | 2024-8-22 09:00 | 只看该作者
在函数被调用之前,程序需要为该函数准备必要的环境,包括保存当前状态(如寄存器的值)和分配栈空间。

使用特权

评论回复
32
updownq| | 2024-8-22 10:25 | 只看该作者
在一些架构中,会保存调用者的栈帧底部地址,这通常是通过基指针(如x86架构中的EBP)实现的。

使用特权

评论回复
33
cashrwood| | 2024-8-22 10:53 | 只看该作者
调用函数的指令序列会将当前的程序计数器(PC)值压入栈中,这个值指向调用指令的下一条指令,即返回地址。

使用特权

评论回复
34
pixhw|  楼主 | 2024-8-22 11:29 | 只看该作者
函数通过调整栈顶指针(esp寄存器)来释放自己的栈帧空间。这通常涉及到将之前保存的调用函数的栈底指针从栈中弹出,并恢复到ebp寄存器中。

使用特权

评论回复
35
geraldbetty| | 2024-8-22 12:13 | 只看该作者
将控制权转移到被调用函数的入口点,开始执行函数体。

使用特权

评论回复
36
tifmill| | 2024-8-22 12:33 | 只看该作者
函数的参数和局部变量会被放入栈帧中相应的位置。

使用特权

评论回复
37
bestwell| | 2024-8-22 13:02 | 只看该作者
如果有必要,会保存某些寄存器的值到栈上,以防止函数调用期间这些值被覆盖。
例如,函数可能需要保存一些寄存器的值,以确保在函数返回后它们仍然保持原来的值。

使用特权

评论回复
38
10299823| | 2024-8-22 13:25 | 只看该作者
如果函数有返回值,通常会将返回值保存在特定的寄存器中,供调用者获取。

使用特权

评论回复
39
fengm| | 2024-8-22 13:47 | 只看该作者
在一些架构中,会保存调用者的栈帧底部地址,这通常是通过基指针(如x86架构中的EBP)实现的。

使用特权

评论回复
40
jonas222| | 2024-8-22 14:06 | 只看该作者
如果函数有参数,这些参数也会被依次压入栈中。参数的压入顺序通常是从右到左。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则