指令运用理解
堆栈运用理解
分析qq的某浏览器套件,只是分析理解运用,并没有任何违规操作(保命要紧)
打开寄存器窗口里,查看FS的值
通过查看,可以看到堆栈栈顶位置及栈底位置
通过栈利用方式,可以帮助理解程序运行中的堆栈利用,所谓栈溢出就是栈顶位置满了,内存不够分配而导致的,通过图可以看出,从最大的0019FFFC到最小的0019D000,如果超出界限,就会发生错误。
不同寄存器不同用途,栈指针寄存器ESP,通过ESP来观察,点击栈跟随,可以看到变化
在地址上0019FFF0上的地址,没有被使用过,使用时从这个位置网上利用,存储运行过程的值
通过修改堆栈的值
将EAX的值存入对战
可以观察到,已经将EAX的值存入堆栈
通过其他命令实现和PUSH相同的效果
通过寄存器ESP的值修改,来实现栈顶指针的修改,通过观察下面两张图可以看到相关命令的效果,SUB时指针向上移动,ADD时指针向下移动
这里说明一下,由于不予许写入内存,所以无法完全实现PUSH的相关功能,这里只是相关理解(能力还不到能修改的境界,有点难受,相关命令为MOV DWORD PTR DS[地址],2)
下面来看POP的使用
执行命令,可以看到堆栈指针退回到原来位置
输入多行命令观察堆栈变化,初始状态
执行命令后状态
可以看到明显变化,这里只是分析理解,并没有做任何违规操作,希望理解