堆栈补充

滴水逆向三期-堆栈补充

堆栈:

(今天就说一点,然后下载od练习去了!堆栈很重要-。-!!!,还有复习!)
push 是减4位(但是不是肯定减4)
push 后面是个立即数的话可以
push al正常后面的容器都是32位的,现在的al是8位的寄存器,试一下后发现不可以点
在这里插入图片描述
发现push al 不可以push8位,push ax(16位的寄存器)
在这里插入图片描述
push ax的发现可以 发现了一个问题:push 一个立即数 -4 而push 一个寄存器(16位的)F8之后变成了BE 发现-2 所以得出结论:
push 一个东西后,发现并不是每一次都是减4的,两种情况:立即数,容器的宽度是32位的那么就-4,push imm8/imm16/imm32不管是32位的立即数还是16位的立即数,还是8位的立即数,他都是减4的,可以把内存的可以push进去的
在这里插入图片描述
发现里面没有8位的寄存器和8位的内存
试一下push内存:
在这里插入图片描述
push sword ptr ds:[0x12FFDA]发现是可以的
在这里插入图片描述
发现ESP的值是减了4的,从BA到了B6 然后里面的值,也是跟上面的指令的12FFDA的值一样 到了这个堆栈里面了,说明可以push一块32位的内存也是双字节的,试一下word :push word ptr ds:[0x12FFDA] 现在是B6
在这里插入图片描述
可以看到word单字节的,减了2
说明了,push后面如果是容器的话,那跟容器的宽度是一样的,不如说这个容器是4字节,那么我们减4,如果是两个字节,那么我们就减2,push 的时候没有m8,寄存器不能选8位的同样,内存也不能选8位的
在这里插入图片描述
同理pop也没有8位的,pop的地址会加同上

PUSHAD指令
POPAD指令
当你想调用某个别人程序的,你担心调用后,寄存器会出错,把别人用的值,给覆盖了或者丢失了,而你不知道用了多少寄存器
在这里插入图片描述
ESP EBP不能乱改,因为这块内存是操作系统为我们分的,如果我们把这两块改了,那我们的堆栈不就丢了,所以这块不能乱改,一会执行pushad的时候这个ESP的值会发生变化,F8之后

在这里插入图片描述
之前是在B6 pushad后到了96 8个,把8个通用寄存器的值存到了内存中去了

在这里插入图片描述
这样就可以把寄存器的值随便改了,比如说把寄存器的值都改一下,然后再恢复就可以使用popad就发现都恢复回去了,保护现场

—————2019.9.16 DT(我滚去刷题去了-。-溜了)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值