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 = 8bit
1字节 -
w
是word = 16bit
2字节 -
l
是long = 32bit
4字节 -
q
是quad-word = 64bit
8字节
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中存储的地址
所在的内存
网友评论