栈不需要清空 可以反复的使用(数组)
栈是通过push 进行操作的 first in last out 先进后出
栈不仅仅是存储临时变量 他还存储跳转后返回地址(程序中每次都调用函数的时候存储)
API相当于函数
程序是顺序执行的 一开始会根据程序计数器一步一步执行
esp表示当前的栈顶 ebp表示栈底 call移动将esp往上走 ebp走到栈顶
栈进行回溯 来存放我们需要记录的一些东西
栈可以传递一些参数用来记录返回地址,记录参数。
栈还是这个栈
汇编代码:
1,赋值语句
2,跳转
3,计算语句
为什么ebp要上移
ebp~esp一个函数的栈
因为必须栈底是什么 每个函数都有零时变量 移动用来清理栈底变量
push的意思是压栈
pop的意思是出栈
破解最主要的是标志寄存器
标志寄存器加程序计数器来决定程序的进行流程
把标志寄存器拿掉破解很方便
寄存器
EBP栈底 ESP栈顶 EIP程序计数器 EFL标志计数器 EAX累加寄存器 EDI圆寄存器 ESI是机子寄存器 (通用寄存器)
内存
发生一个push就开始进栈
push ebs
mov ebp,esp//栈底发生改变 要复原栈底
pop出栈在栈中取东西
add增加一个地址
sub esp,0D8h 开始进栈的时候给他一个空间
代码
堆 指针 自己释放 不释放会出现内存泄漏
栈
常量
vs2015可以看反汇编 内存编码