逆向系列–寄存器
汇编与逆向系列
程序计数器
通常称PC
,在x86-64
中用%rip
表示。 指向下一条将要执行的指令在内存中的地址。
整数寄存器
一个x86-64
的cpu
包含一组16个存储64位的通用目的寄存器
,这些寄存器用来存储整数数据和指针。
他们名字都以%r
开头, 不过后面还跟着一些不同的命名规则的名字,这是由于指令集历史演化造成的,最初的8086
中有8个16位寄存器(下图的%ax
到%bp
)。扩展到IA32
架构时, 这些寄存器也扩展到32位(%eax
到%ebp
)。扩展到x86-64
后, 原来的8个寄存器扩展到64位(%rax
到%rbp
),除此之外,还增加了8个新寄存器,标号是按新的命名规则:从%r8
到%r15
。
63 31 15 7 0
+------------------------------+--------------+---------+-----+
|%rax |%eax |%ax |%al | 返回值
+------------------------------+--------------+---------+-----+
|%rbx |%ebx |%bx |%bl | 被调用者保存
+------------------------------+--------------+---------+-----+
|%rcx |%ecx |%cx |%cl | 第4个参数,特殊:%cl 存放移位量
+------------------------------+--------------+---------+-----+
|%rdx |%edx |%dx |%dl | 第3个参数
+------------------------------+--------------+---------+-----+
|%rsi |%esi |%si |%sil | 第2个参数
+------------------------------+--------------+---------+-----+
|%rdi |%edi |%di |%dil | 第1个参数
+------------------------------+--------------+---------+-----+
|%rbp |%ebp |%bp |%bpl | 被调用者保存
+------------------------------+--------------+---------+-----+
|%rsp |%esp |%sp |%spl | 栈指针
+------------------------------+--------------+---------+-----+
|%r8 |%r8d |%r8w |%r8b | 第5个参数
+------------------------------+--------------+---------+-----+
|%r9 |%r9d |%r9w |%r9b | 第6个参数
+------------------------------+--------------+---------+-----+
|%r10 |%r10d |%r10w |%r10b| 调用者保存
+------------------------------+--------------+---------+-----+
|%r11 |%r11d |%r11w |%r11b| 调用者保存
+------------------------------+--------------+---------+-----+
|%r12 |%r12d |%r12w |%r12b| 被调用者保存
+------------------------------+--------------+---------+-----+
|%r13 |%r13d |%r13w |%r13b| 被调用者保存
+------------------------------+--------------+---------+-----+
|%r14 |%r14d |%r14w |%r14b| 被调用者保存
+------------------------------+--------------+---------+-----+
|%r15 |%r15d |%r15w |%r15b| 被调用者保存
+------------------------------+--------------+---------+-----+
所有16个寄存器的低位部分都可以作为字节、字(16位)、双字(32位)和4字(64位)数字来访问
条件码寄存器
描述最近的算法或逻辑操作的属性
常用的条件码:
- CF: 进位标志。最近的操作使最高位产生了进位。可用来检查无符号操作的溢出。
- ZF: 零标志。最近的操作得出结果为0。
- SF:符号标志。最近的操作得到结果为负数。
- OF:溢出标志。最近的操作导致一个补码溢出(有符号溢出)—-正溢出和负溢出。
其他
待更新
Read other posts