操作举例:把ebx的内容移动到eax中
机器指令:由0和1组成的序列
汇编指令:mov eax ,ebx (寄存器)
16进制
89D8
1000 1001 1101 1000
保存操作数,保存需要传递的数据
(0和1),保存计算结果
1)EAX:累加寄存器,也称之为累加器。举例1+1=2,会把2放到eax里面
2)EBX:基地址寄存器,存放地址的寄存器
3)ECX:计数器寄存器,比如说写一个for循环,循环5次,5这个放在计数寄存器
4)EDX:数据寄存器,一般放需要的数据,for循环有个值是5,一般放在EDX
EAX,EBX,ECX,EDX为32位寄存器
AX,BX,CX,DX位16位寄存器
低八位:al
高八位:ah
操作栈的寄存器
ESP:保存指向栈顶的指针
EBP:保存指向栈底的指针
保存栈的参数和变量
1)push eax前
eax的值: 0019FFCC
堆栈信息:(0019FF70存的是0019FF80,栈底的地址)
2)push eax后
栈数据的变化:(由于是32位的exe,0019FF70栈顶向栈底偏移4个字节的长度,就是0019FF6C)
0019FF6C变为栈顶指针,栈顶指针存的数据变成原先eax的值0019FFCC
指寄存器ESI,EDI,SI,DI的寄存器,主要用于存放存储单元在段内的偏移量
ESI:存放地址的寄存器
EDI:存放地址的寄存器
EIP寄存器:由存断点的位置表示出来(保存CPU下一次将要执行代码的地址)
当执行到004013A5 68 D41E4000 push TraceMe.004040D0,push指令会把下一步执行代码的地址压栈,原先栈顶指针0019FF6C就变成0019FF68,且值变为004040D0,这就是EIP寄存器的作用
EFL标志寄存器:也叫flag寄存器,占16位的大小
(做运算就会影响ZF位)
EFL:246的16进制
1001000110
sub esp,0x58 (由于esp减0x58不为0,ZF位置为0;当结果为0,ZF就置为1)