# 目录 - [CPU寄存器](#cpu寄存器) - [x86-64 Linux System V ABI的寄存器用途](#x86-64-linux-system-v-abi) - [Flags 标志位](#flags-标志位) ## CPU寄存器 ### x86-64 **Linux** System V ABI | 寄存器 | 用途 | 调用约定 | 32位 | 16位 | 8位 | | ------ | ---- | -------- | ----- | ----- | --- | | ```%rax``` | 返回值 | Caller-saved | ```%eax``` | ```%ax``` | ```%al``` | | ```%rbx``` | 基址寄存器 | Callee-saved | ```%ebx``` | ```%bx``` | ```%bl``` | | ```%rcx``` | 传递参数 | Caller-saved | ```%ecx``` | ```%cx``` | ```%cl``` | | ```%rdx``` | 传递参数 | Caller-saved | ```%edx``` | ```%dx``` | ```%dl``` | | ```%rsi``` | 传递参数 | Caller-saved | ```%esi``` | ```%si``` | ```%sil``` | | ```%rdi``` | 传递参数 | Caller-saved | ```%edi``` | ```%di``` | ```%dil``` | | ```%rsp``` | 栈指针 | Callee-saved | ```%esp``` | ```%sp``` | ```%spl``` | | ```%rbp``` | 帧指针 | Callee-saved | ```%ebp``` | ```%bp``` | ```%bpl``` | | ```%r8``` | 传递参数 | Caller-saved | ```%r8d``` | ```%r8w``` | ```%r8b``` | | ```%r9``` | 传递参数 | Caller-saved | ```%r9d``` | ```%r9w``` | ```%r9b``` | | ```%r10``` | 临时寄存器 | Caller-saved | ```%r10d``` | ```%r10w``` | ```%r10b``` | | ```%r11``` | 临时寄存器 | Caller-saved | ```%r11d``` | ```%r11w``` | ```%r11b``` | | ```%r12``` - ```%r15``` | 被调用者保存寄存器 | Callee-saved | ```%r12d``` - ```%r15d``` | ```%r12w``` - ```%r15w``` | ```%r12b``` - ```%r15b``` | | | | | | **```%rip```** | 指令指针 | | ```%eip``` | ```%ip``` | | | **```%rflags```** | 标志寄存器 | | ```%eflags``` | ```%flags``` | | ### Flags 标志位 | VS显示名称 | 标志位 | 全称 | 为1时表明... | 用户态可用 | | ---------- | ------ | ---- | ---- | ---------- | | OV | OF | **O**ver**f**low Flag | 有符号数运算结果溢出 | √ | | UP | DF | **D**irection **F**lag | 字符串指令的处理方向递减 | √ | | EI | IF | **I**nterrupt **F**lag | 允许外部中断 | | | PL | SF | **S**ign **F**lag | 结果为负数 | √ | | ZR | ZF | **Z**ero **F**lag | 结果为零 | √ | | AC | AF | **A**uxiliary carry **F**lag | (辅助进位) | √ | | PE | PF | **P**arity **F**lag | 结果的二进制表示中1的个数为偶数 | √ | | CY | CF | **C**arry **F**lag | 无符号数运算结果溢出 | √ | ## GDB调试常用命令 ### 程序运行控制 | 命令 | 别名 |作用 | 备注 | | ---- | ---- | ---- | ---- | | ```run``` | ```r``` | 运行程序 | 可以带参数,如```run arg1 arg2``` | | ```continue``` | ```c``` | 继续执行程序 | 在断点处暂停后使用 | | ```stepi``` | ```s``` | 单步执行 | 进入函数调用 |