【问题标题】: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。

标签: c++ function


【解决方案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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-08-12
        • 2017-05-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-30
        相关资源
        最近更新 更多