堆栈指令
什么是堆栈
1. 就是⼀块内存,操作系统在启动程序的时候已经分配好的,供程序执⾏时使⽤,也就是村饭程序执⾏时形成⼀些临时数据,⼀些中间
值。
2. 和数据结构的堆栈⽆关。
3. 查看堆栈
当内存⽤完了,程序就会出错,称为堆栈溢出。
内存⽤的是从⼤地址到⼩地址,在堆栈区是从下往上⽤。
栈指针寄存器(ESP)
寄存器ESP就是⽤来看内存⽤到什么地⽅的,右水吧是干什么的 击->在栈中转到,就可以在堆栈区看到。
堆栈的使⽤
就⽐如说:破解⼀个程序,有⼀个加密函数和解密函数,当⼀个程序执⾏完了,是看不出密码,⽽明⽂之类的中间过程在堆栈中临时出现
1. 存储数据
就是通过查看堆栈已⽤到什么位置,然后使⽤已⽤地址的上⾯地址编码,在反汇编的窗⼝在已执⾏停⽌的位置开始进⾏对内存的字节
定义宽度并且存储数值。
2. 修改栈顶指针
既然使⽤了堆栈内存祝愿母校 ,就要对寄存器的ESP进⾏修改,⽤来多少字节就减⼏个字节,指令:sub esp,字节数
3. 恢复栈顶
如果栈点⽤过后不⽤了,得把堆栈区的栈顶修改回去,在反汇编窗⼝程序停留位置,指令:add esp,字节数,字节数⽤⼗六进制(32
位的就是4,16位的就是2字节)
PUSH指令:
功能:
1. 向堆栈中压⼊数据
2. 修改栈顶指针ESP寄存器的值丁酉年
指令格式:
例如:
反汇编当前停留位置执⾏push 3,执⾏后堆过年画怎么画 栈区向上移动⼀个编码地址,并且最后简朴造句 的内存编码位置存储了3,寄存器ESP变为移动后的编码
地址。
上⾯是push ⼀个具体的值,对于寄存器,如果是push EAX,那么就会把EAX的值存储到堆栈中移动后终⽌编码地址,寄存器ESP的值同
样改变。
如果是push内存地址的话,例如:push dword ptr ds:[内存窗⼝⾥的地址编码],也是同样的原理,
POP指令
功能:
1. 将栈顶数据存储到寄存器/内存⾥
2. 修改栈顶指针ESP寄存器
就是⽐如说我们要⽤⼀个计数寄存器ECX,但ECX⾥⾯原本有值,暂网名昵称 时不⽤但是过后要⽤,就可以先push ecx,把ecx值先存到堆栈的
编码地址⾥,华北大演习 然后再mov ecx,数值,进⾏⼀系列使⽤,然后再mov ecx dword ptr ds:[堆栈⾥含有需要数值的EXC的地址编码],就⼜
把ECX存储原来的值,接着add esp 字节数,恢复栈顶。
⽽对于如果我们想要堆栈⾥的编码所对应的值,pop 内存/寄存器,就是把当前断点的党参乌鸡汤 地址编码的值存到内存或寄存器⾥,并且ESP也加了
4个字节,地址向上移动⼀位。
本文发布于:2023-04-23 16:42:11,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/fan/82/511110.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |