汇编中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 这样即可增加汇编代码可读性。
本博客注有“转”字样的为转载文章,其余为本人原创文章,转载请务必注明出处或保存此段。c++/lua/windows逆向交流群:69148232