什么是堆栈
- 就是一块内存,操作系统在启动程序的时候已经分配好的,供程序执行时使用,也就是村饭程序执行时形成一些临时数据,一些中间值。
- 和数据结构的堆栈无关。
- 查看堆栈
当内存用完了,程序就会出错,称为堆栈溢出。
内存用的是从大地址到小地址,在堆栈区是从下往上用。
栈指针寄存器(ESP)
寄存器ESP就是用来看内存用到什么地方的,右击->在栈中转到,就可以在堆栈区看到。
堆栈的使用
就比如说:破解一个程序,有一个加密函数和解密函数,当一个程序执行完了,是看不出密码,而明文之类的中间过程在堆栈中临时出现
- 存储数据
就是通过查看堆栈已用到什么位置,然后使用已用地址的上面地址编码,在反汇编的窗口在已执行停止的位置开始进行对内存的字节定义宽度并且存储数值。 - 修改栈顶指针
既然使用了堆栈内存,就要对寄存器的ESP进行修改,用来多少字节就减几个字节,指令:sub esp,字节数 - 恢复栈顶
如果栈点用过后不用了,得把堆栈区的栈顶修改回去,在反汇编窗口程序停留位置,指令:add esp,字节数,字节数用十六进制(32位的就是4,16位的就是2字节)
PUSH指令:
功能:
- 向堆栈中压入数据
- 修改栈顶指针ESP寄存