指令
1、32位通用寄存器
EAX EXC EDX EBX ESP EBP ESI EDI
2、16位通用寄存器
AX XC DX BX SP BP SI DI
3、8位通用寄存器
AH AL
XH XL
DH DL
BH BL
4、寄存器的结构
EAX-AX-AH-AL
5、内存单元:字节---每个字节都有编号,称为内存地址。
操作指定的内存:8位内存、16、32位内存
内存中的存放方式是倒叙的。与堆栈中的数据反序。
命令:db 0x88ff1c 查看 反序
dd 0x88ff1c 查看 正序
6、基础汇编指令
1)移动 mov
mov eax,0x1234
mov eax,ecx
2)减 sub
mov eax,0x3
sub eax,0x2
3)加 add
mov eax,0x2
add eax,0x3
4)内存存储、读取
存储:mov dword ptr ds:[0x0015FF1C],0x1234
读取:mov eax,dword ptr ds:[0x0015FF1C]
5)ADC带进位的加法
adc al,cl
6)sbb带进位的减法
sbb al,cl
7)XCHG 交换数据
SCHG al,cl
8) movs 移动数据 内存--内存、
movs dword ptr es:[0x1245ff2d],dword ptr ds:[0x1245ff2e]
movsd 加上D 的意思是,调用esi edi寄存器中存放的值
9)STOS将al\ah\ax\eax通用寄存器里的值存储到EDI指定的内存单元中
stos dword ptr es:[edi]
10)REP 按计数寄存器(ecx)中指定的次数重复执行字符串指令
mov ecx,10
rep movsd
rep stosd
--------------------------------------------
修改EIP的一些指令
11)JMP
jmp 0x418356F1
堆栈、寄存器 无影响
12)CALL
为了CALL能成功,跳之前下断点
call 0x418356F1
RETN
执行完,会出堆栈,push 一个跳转之前额度下一跳地址,俗称 返回地址
13)RET
----------------------------------------------------
JCC
14)CMP 比较两个值
与sub的不同,cmp 只是比较,修改标志位,不会修改通用寄存器
cmp eax,ecx
15)TEST 进行与运算操作。
主要是判断是否为空。为空Z位为1,否则为0
-------------------------------------------------------