汇编中的 CALL 函数

CALL function in assembly

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

此答案假设 Intel x86 architecture

Is is right when I execute a CALL function in assembly that instruction is pushed onto the stack ?

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

When is the instruction popped back when I CALL a function ?

通常在您执行 RET 指令时。

有关详细信息,请参阅 x86 calling conventions, and Intel's x86 instruction manual

在 x86 上 x86/64bit 调用压入下一条指令的堆栈地址。

例如:

call after_hello
db 'hello', 0xa
after_hello:

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