如果我说“叫”而不是跳怎么办?由于未编写任何return语句,控制权仅传递到下面的下一行,还是在调用后仍返回到该行?
start:
mov $0, %eax
jmp two
one:
mov $1, %eax
two:
cmp %eax, $1
call one
mov $10, %eax
最佳答案
您的直觉是正确的:函数返回后,控件仅传递到下面的下一行。
在您的情况下,在call one
之后,您的函数将跳至mov $1, %eax
,然后继续下降至cmp %eax, $1
,并最终陷入无限循环,就像您再次call one
一样。
除了无限循环之外,由于call
命令将当前rip
(指令指针)写入堆栈,因此函数最终将超出其内存限制。最终,您将溢出堆栈。
关于assembly - 如果汇编程序中的CALLed代码块中没有return语句怎么办,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56310131/