掌握汇编语言,需要掌握:
- 汇编指令
- 寄存器
汇编语言的种类
- 8086汇编-16bit
- x86汇编-32bit
- x64汇编-64bit
- ARM汇编-嵌入式,移动设备
其中,x64汇编根据编译器的不同,有2种书写格式
- Intel
- AT&T(包括Xcode)
一般的规律:
R开头的寄存器是64bit,占8Byte
E开头的寄存器是32bit,占4Byte
X64汇编要点总结:
mov dest, src
将src内容赋值给dest,类似于dest = src
区别lea,lea是赋值地址值
[地址值]
[]里放的都是内存地址
word=2字节
dword=4字节=double word
qword=8字节=quad word
call 函数地址
调用函数
lea dest, [地址值]
将地址值赋值给dest,类似于dest = 地址值
区别mov,mov是赋值地址里的值
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 内存地址
跳转到某个内存地址去执行代码
jne 内存地址
jump not equal,比较结果不相等才跳转
j开头的一般都是跳转,大多数是带条件的跳转,一般跟test,cmp等指令配合使用
cmp 数值 数值
比较两个值是不是相等
push 压栈
一般call指令前的push都是在传参
权威参考:Intel白皮书
https://www.intel.com/content/www/us/en/developer/articles/technical/intel-sdm.html