汇编与逆向系列

程序计数器

通常称PC,在x86-64中用%rip表示。 指向下一条将要执行的指令在内存中的地址。

整数寄存器

一个x86-64cpu包含一组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:溢出标志。最近的操作导致一个补码溢出(有符号溢出)—-正溢出和负溢出。

其他

待更新