Swift Day04 常见AT&T汇编
2020-11-27 本文已影响0人
望穿秋水小作坊
1. movq %rax, %rdx 是什么意思?
- 将
rax的值赋值给rdx
2. movq $0x10, %rax 是什么意思?
- 将
0x10赋值给rax
3. movq $0xa, 0x1ff7(%rip) 是什么意思?
- 将
0xa赋值给地址为rip+0x1ff7的内存空间 - MOV指令可以在
CPU 内或CPU和存储器之间传送数据 - 从
寄存器到寄存器 - 从
立即数到寄存器 - 从
立即数到存储器 - 从
寄存器到存储器 - 从
存储器到寄存器
4. xorl %ecx, %ecx 是什么意思?
- 将 %ecx 和 %ecx 进行异或操作,其实效果就是将 %ecx 的
内存值归零 -
xorl 、 movl 、andl都可以将内存值归零,但是xorl是效率最高的
6. leaq -0x18(%rbp), %rax 是什么意思?
- 将
rbp-0x18的地址值赋值给%rax -
lea 指令:load effective address,加载有效地址,可以将有效地址传送到指定的寄存器。 - 指令形式是从
存储器读数据到寄存器,效果是将存储器的有效地址写入到目的操作数,简单来说,就是 C 语言中的&
7. jmp 0x4001002 是什么意思?
- 跳到 指定地址
0x4001002继续开始执行指令
8. movq leaw movb movl中的 b w l q分别代表什么?
-
b是byte = 8bit1字节 -
w是word = 16bit2字节 -
l是long = 32bit4字节 -
q是quad-word = 64bit8字节
9. 32为的寄存器以什么字母开头?64 位的寄存器以什么开头?
- 32 位的寄存器以 e 开头,占 4 字节
- 64 位的寄存器以 r 开头,占 8 字节
10. 常用的一些 lldb 指令
lldb 指令
11. 在汇编指令中 rip 存储的是什么?
- rip 存储的是指令的地址
- CPU 要执行的下一条指令的地址就存储在 rip 中
12. 一般规律
- 内存地址格式为:0x4bdc(%rip),一般是全局变量,在全局区(数据段)
- 内存地址格式为:-0x78(%rbp),一般是局部变量,栈空间
- 内存地址格式为:0x10(%rax),一般在堆空间
-
rax、rdx常作为函数返回值使用 -
rdi、rsi、rdx、rcx、r8、r9这些寄存器常用语存放函数参数
13. movq $0xb,(%rax) 是什么意思?
- 将
立即数11的值赋给rax中存储的地址所在的内存