由于汇编代码中的不同位置 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 这样即可增加汇编代码可读性。