开始时,%ebp通常设置为%esp.如果我将堆栈指针设置为某个特定位置,那么基本指针也会改变吗?
我是否需要将其更改为新位置,例如$(newstacklocation - 4)?
基指针和堆栈指针是独立的寄存器.基指针仅在将其设置为新值时才会更改.设置堆栈指针不会隐式更改任何其他通用寄存器.
顺便提一下,这是保持基指针的全部原因:如果你推或弹出堆栈,堆栈指针会改变,所有esp相关的偏移也会改变.然而,基指针不会改变,因此ebp堆栈上变量的相对偏移量保持不变.这使得在汇编中编写函数变得更加容易,因为您可以修改堆栈帧而无需修复所有堆栈偏移.