汇编中push寄存器的影响

由于汇编代码中的不同位置 ESP+40所指的地址不像EBP+40的地址那个是一定的,ESP+40指向的地址由栈顶变化影响。也就是和操作栈指令 PUSH POP 等影响。

汇编栈是一个线性的地址区间,地址上面小大面大。如下图所示,ESP指向栈顶地址

PUSH 寄存器相当于 ESP减4。由此可推算

那么则有如下公式

前面PUSH数目为PUSH_COUNT

前面POP数目为POP_COUNT

ESP基础值为 B_ESP

则汇编代码中的 ESP+OFFSET = ESP基础值+OFFSET-PUSH数*4。

则有计算代码中ESP+XX的地址实际相对于基础EPS有如下公式:  ESP+OFFSET = B_ESP + OFFSET-(PUSH_COUNT*4)+(POP_COUNT*4)。

那么定一相值,就可以使汇编代码中所有 ESP+XXX。转换为基础值+XXX 这样即可增加汇编代码可读性。

原文地址:https://www.cnblogs.com/zhangdongsheng/p/5953337.html