首先,需要了解c语言中汇编语言里eax,ebx,ecx,edx,ebp,edi,esi;mov,sub,add,jmp,jn,test;push,pop,call,ret,lea;这些都是什么意思。
eax,ebx,ecx,edx,esi,edi,dbp... ...都是x86汇编语言中cpu上的通用寄存器的名称,是三十二位的寄存器。如果用c语言来解释,可以把这些寄存器当作变量来待。
x86是指三十二位操作系统。
三十二位寄存器有许多用途,但是每个都有自己的专长,有各自的特别之处。
eax 是 “累加器”,是很多加法乘法指令的缺省寄存器。
ebx 是“基地址”,寄存器,在内存寻地址时存放地址。
ecx 是计时器,是重复前缀指令和loop指令的内定计时器。
edx则是被用来放帧数除法产生的余数。
esi/edi分别叫做“源/目标索引寄存器”。
ebp是"基址指针",他最经常被用作高级语言函数调用的“框架指针”在破解的时候,经常可以看见一个标准的函数起始代码;
push ebp;保存当前的ebp
mov, ebp, esp ;ebp设为当前堆栈指针//mov(传送)a(累加寄存器)#30h(十六进制立即数) 将立即数30h(十六进制)传送到A里面。
//堆栈指针:是一个抽象的数据类型,规定的两项必备的基本操作分别为入栈和出栈,并没有规定入栈和出栈要怎么实现。
sub ,esp,xxx;预留xxx字节给函数临时变量... ...
这样一来,ebp构成了函