汇编中push寄存器的影响

ESP地址计算
本文解析了在汇编语言中如何计算ESP寄存器指向的地址。通过介绍栈的运作原理及PUSH与POP指令的影响,给出了一个计算ESP+OFFSET实际地址的通用公式。

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值