X86_64汇编语言:标志位和条件跳转指令
目录
警告
本文最后更新于 2023-05-17,文中内容可能已过时。
这几个东西,当初学汇编的时候没咋认真看,今天整理一下。
在 RE 的 VM 里或者 PWN 的 Fix 里用到都蛮多的。
标志位
- 进位标志 CF (Carry Flag)
- 零标志 ZF (Zero Flag)
- 符号标志 SF (Sign Flag)
- 奇偶标志 PF(Parity Flag)
- 溢出标志 OF (Overflow Flag)
- 辅助进位标志 AF(Auxiliary Flag)
- 方向标志 DF(Direction Flag)
- 中断允许标志 IF(Interrupt Flag)
- 陷阱标志 TF(Trap Flag)
条件跳转指令表
| 指令助记符 | 检查标记位 | 说明 | 比较类型 |
|---|---|---|---|
| JZ | ZF == 1 | 等于 0 则跳转 | 无符号比较 |
| JE | ZF == 1 | 相等则跳转 | 无符号比较 |
| JNZ | ZF == 0 | 不等于 0 则跳转 | 无符号比较 |
| JNE | ZF == 0 | 不相等则跳转 | 无符号比较 |
| JS | SF == 1 | 符号为负则跳转 | 有符号比较 |
| JNS | SF == 0 | 符号为正则跳转 | 有符号比较 |
| JP/JPE | PF == 1 | “1”的个数为偶数则跳转 | 无符号比较 |
| JNP/JPO | PF == 0 | “1”的个数为奇数则跳转 | 无符号比较 |
| JO | OF == 1 | 溢出则跳转 | 有符号比较 |
| JNO | OF == 0 | 无溢出则跳转 | 有符号比较 |
| JC | CF == 1 | 进位则跳转 | 无符号比较 |
| JB | CF == 1 | 小于则跳转 | 无符号比较 |
| JNAE | CF == 1 | 不大于则跳转 | 无符号比较 |
| JNB | CF == 0 | 不小于则跳转 | 无符号比较 |
| JAE | CF == 0 | 大于等于则跳转 | 无符号比较 |
| JBE | CF == 1 or ZF == 1 | 小于等于则跳转 | 无符号比较 |
| JNA | CF == 1 or ZF == 1 | 不大于则跳转 | 无符号比较 |
| JNBE | CF == 0 or ZF == 0 | 不小于则跳转 | 无符号比较 |
| JA | CF == 0 or ZF == 0 | 大于则跳转 | 无符号比较 |
| JL | SF != OF | 小于则跳转 | 有符号比较 |
| JNGE | SF != OF | 不大于则跳转 | 有符号比较 |
| JNL | SF == OF | 不小于则跳转 | 有符号比较 |
| JGE | SF == OF | 大于等于则跳转 | 有符号比较 |
| JLE | ZF != OF or ZF == 1 | 小于等于则跳转 | 有符号比较 |
| JNG | ZF != OF or ZF == 1 | 不小于则跳转 | 有符号比较 |
| JNLE | SF == OF and ZF == 0 | 不小于等于则跳转 | 有符号比较 |
| JG | SF == OF and ZF == 0 | 大于则跳转 | 有符号比较 |