如果我在x86中更改堆栈指针,基指针会改变吗?

Mer*_*ury 0 x86 assembly

开始时,%ebp通常设置为%esp.如果我将堆栈指针设置为某个特定位置,那么基本指针也会改变吗?

我是否需要将其更改为新位置,例如$(newstacklocation - 4)?

fuz*_*fuz 5

基指针和堆栈指针是独立的寄存器.基指针仅在将其设置为新值时才会更改.设置堆栈指针不会隐式更改任何其他通用寄存器.

顺便提一下,这是保持基指针的全部原因:如果你推或弹出堆栈,堆栈指针会改变,所有esp相关的偏移也会改变.然而,基指针不会改变,因此ebp堆栈上变量的相对偏移量保持不变.这使得在汇编中编写函数变得更加容易,因为您可以修改堆栈帧而无需修复所有堆栈偏移.