【发布时间】:2016-10-28 13:37:34
【问题描述】:
在 C/x86 中,从函数返回时,我们通常:
-
pop ebp恢复之前函数的帧指针 -
ret其中(据我了解)包含一个隐式的pop eip以便调用函数可以从返回地址继续执行
此时,我期望 esp 包含什么?它是指向直接高于返回地址的指针,还是 esp 的值也被ret 隐式更改?
谢谢:)
【问题讨论】:
-
在 CDECL 调用约定中,
esp现在将指向调用前压入堆栈的最后一个参数。 -
对于此类进一步的问题,您可能需要阅读手册,其中包含对每条指令作用的非常详细的解释。
-
@CodyGray:
ret确实会影响 esp:它会像 OP 所说的那样弹出返回地址。正确的说法是调用/返回对不会影响堆栈(假设调用约定是调用者弹出 args,而不是使用ret imm16的被调用者) -
呃,错字!意思是说做。谢谢@彼得