【问题标题】:CALL function in assembly汇编中的 CALL 函数
【发布时间】:2015-08-21 08:36:28
【问题描述】:

我对汇编代码中的 CALL 函数有疑问。当我在汇编中执行 CALL 函数时,将指令推入堆栈是否正确? 当我CALL一个函数时,指令什么时候弹出?

【问题讨论】:

标签: assembly x86 stack push


【解决方案1】:

这个答案假设Intel x86 architecture

当我在汇编中执行 CALL 函数时,该指令被推入堆栈是正确的吗?

没有。入栈的是指令指针的值,此时该指针指向CALL指令后面的指令。

当我调用一个函数时,指令什么时候弹出?

通常在您执行RET 指令时。

有关详细信息,请参阅x86 calling conventions 和英特尔的x86 instruction manual

【讨论】:

  • 这取决于架构和用于函数调用的调用约定。例如,PPC 不会推送任何内容。
  • 是的,但我假设是 x86,因为问题被标记为 esp
  • esp 标签似乎没有定义。操作应该更具体。
【解决方案2】:

在 x86 和 x86/64 位调用下,压入下一条指令的堆栈地址。

例如:

call after_hello
db 'hello', 0xa
after_hello:

在栈顶的这个时刻,你有这个字符串的地址——这是一个很好的技巧。可能在这一刻你从不使用 ret 来跳转到调用后的第一条指令。

【讨论】:

    猜你喜欢
    • 2015-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-31
    • 2015-09-04
    • 2011-09-21
    • 2017-04-15
    • 1970-01-01
    相关资源
    最近更新 更多