栈不需要清空 可以反复的使用 (数组)
栈是通过 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 可以看反汇编 内存编码
来源: http://www.bubuko.com/infodetail-2991987.html