这可能很容易,但我对此感到困惑一段时间:
假设我有类似的东西
main:
...
call some_fun
...
some_fun:
...
jmp op
...
op:
...
ret
这 ret 会正确返回到通话开始的地方吗?如果不是,那么 ret 将如何正确返回?
如果在提供的示例中,您希望它返回后执行的下一条指令是call some_fun之后的指令,那么是的,只要您在返回之前清理堆栈帧,它将完全按照您的意愿执行。
假设您使用的是 x86 程序集,这就是正在发生的事情。
希望这可以帮助。
如果它仍然崩溃,然后尝试
move dword[stak],esp ;一开始
并以
mov esp,[stak]
ret
有点东西
升