汇编中的 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 在调用后跳转到第一条指令。
我对汇编代码中的 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 在调用后跳转到第一条指令。