当一个程序集有一个像jmp f的指令时,堆栈和框架指针会发生什么?
我的意思是 - f是内存中的一个标签,对吧?我们如何跳转到内存中的不同地址而不更新我们的框架和堆栈指针...
编辑:我说的是Intel x86汇编语言。
注意:在x86中,有许多种“jmp”指令。最常见的是“本地”jmp,它只是简单地改变EIP寄存器的值,因此栈帧根本不会被触及,正如Carl所指出的那样。我假设你说的是这种类型的jmp,因为这是汇编器用类似于以下语法生成的一种:
jmp label
...
label:
如何在内存中跳转到不同的地址而不更新我们的帧和堆栈指针...
因为指令指针(eip)存储在与帧和堆栈指针(esp、ebp)不同的寄存器中。更改其中一个不会影响其他指针(通常情况下)。
JMP
是汇编语言中的goto
,具有相同的含义。
有时候你需要从不同的地址开始执行程序。