函数返回时发生了啥
Posted
技术标签:
【中文标题】函数返回时发生了啥【英文标题】:what happened when function return函数返回时发生了什么 【发布时间】:2014-01-03 12:52:32 【问题描述】:我知道当调用者函数调用被调用者函数时,调用者函数推送参数和返回地址,然后为被调用函数构造堆栈帧,包括push %ebp %ebx %edi %esi 和push 局部变量。但是当被调用者返回时发生了什么?
【问题讨论】:
那么,push()
操作的逆运算是什么?
(请注意,您所知道的只是一种特定的调用约定,许多细节在其他环境中可能并且将会有所不同。)
e,这是 C/C++ 中的默认调用约定。
@stamaimer:在 x86-32 上,即使那样我也不确定它在所有操作系统上是否完全相同。例如。 AFAIK Visual C++/x86-32 在 ECX
中传递 this
,而不是 statk。
【参考方案1】:
实际上 C++ 没有标准的应用程序二进制接口 (ABI)。 C 有,但程序员可能会通过应用编译器特定的调用约定来改变它。概述(机器 x86)位于:http://en.wikipedia.org/wiki/X86_calling_conventions
【讨论】:
【参考方案2】:被调用者将返回值保存在栈中并返回。
【讨论】:
【参考方案3】:被调用函数执行以下任务
-> push the address of previous stack frame
-> push the local variables
-> performs computation
-> restores previous stack frame
-> store the function result
-> jump to return address
【讨论】:
以上是关于函数返回时发生了啥的主要内容,如果未能解决你的问题,请参考以下文章