汇编和可执行文件2

栈不需要清空  可以反复的使用(数组)

栈是通过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可以看反汇编 内存编码

原文地址:https://www.cnblogs.com/liugangjiayou/p/10555324.html