一、汇编难或不难?
-
学习汇编主要学习两大知识点
1> 寄存器
2> 汇编指令 -
不同的平台下,x64汇编有2种。
1> 目前大部分Windows平台:Intel
2> Mac平台:AT & T -
汇编的种类
8086 (16bit)
x86 (32bit)
x64 (63bit)
ARM (嵌入式、移动设备) -
汇编不区分大小写
二、计算机原理图
三、寄存器
- x64环境,64bit:
RAX\RBX\RCX\RDX:通用寄存器- x86环境,32bit:
EAX\EBX\ECX\EDX:通用寄存器- 16bit:
AX\BX\CX\DX:通用寄存器
- 把RAX对半分,就兼容EAX,同理,兼容AX
一般规律:
R开头,64bit
E开头,32bit
四、汇编指令
1. mov dest, src
说明: mov dest, src : 把来源src移动到目标位置dest
// 把10 移动到寄存器eax中
mov eax, 10
2. [地址值]
中括号[ ]里面放的都是内存地址
3.word:2字节;dword:4字节(double word);qword:8字节(quad word)
例如:int a = 3;
转成汇编:mov dword ptr [ebp-8],3
解释:把3赋值给变量a的地址值,使用4个字节空间
4.call 函数地址
函数调用
5.其他
- lea dest, [地址值]
load effect address : 装载一个有效的地址值
lea eax, [1122H]
结果=> eax == 1122h
mov eax, dword ptr [1122H] (假设这里的内容值为3)
结果=> eax == 3
-
ret : 函数返回
-
xor op1, op2
表示:将op1 和op2异或的结果赋值给op1, 类似op1 = op1 ^ op2 -
add op1, op2
表示:op1 = op1 + op2 -
sub op1, op2
表示:op1 = op1 - op2 -
inc op
表示:op = op + 1 -
dec op
表示:op = op - 1 -
jmp 内存地址
表示: -
cmp
表示:比较 compare -
jne 01202683
表示: jump not equal,如果不相等,就跳转,否则正常往下走