汇编逆向常用语句
0x01 传送指令
| 指令集 |
作用 |
| MOV DESC,SRC |
移动值 |
| XCHG OPRD1,OPRD2 |
交换内容 |
| PUSH |
压栈 |
| POP |
出栈 |
| PUSHA |
16个寄存器全进栈 |
| POPA |
16个寄存器全出栈 |
| PUSHAD |
32个通用寄存器全进栈 |
| POPAD |
32个通用寄存器全出栈 |
0x02 算术运算指令
| 指令 |
作用 |
| ADD DESC,SRC |
加法指令,DESC <= DESC+SRC |
| ADC DEST,SRC |
带进位加法指令,DESC <= DESC+SRC+CF |
| SUB DESC,SRC |
减法指令,DESC <= DESC-SRC |
| SBB DESC,SRC |
带错位减法指令,DESC <=DESC-(SRC+CF) |
| INC DEST |
加1指令,DEST <= DEST+1 |
| DEC DEST |
减一指令DEST <= DEST-1 |
| NEG OPED |
取补指令,OPRE <= 0-OPRD |
| MUL OPRD |
无符号数乘法 |
| IMUL OPRD |
有符号数乘法 |
| DIV OPRD |
无符号数除法 |
| IDIV OPRD |
有符号数除法 |
0x03 逻辑与位运算指令
| 指令 |
作用 |
| CWD/CWDE |
字转换为双字指令,符号扩展 |
| CDQ |
双字转换为四字指令 |
| MOVSX DEST,SRC |
符号扩展传送指令,将SRC符号扩展后送至DEST |
| MOVZX DEST,SRC |
零扩展传送指令,将SRC零扩展后送至DEST |
| NOT OPRD |
按位取反 |
| AND DEST,SRC |
按位与送到DEST |
| OR DEST,SRC |
按位或送到DEST |
| XOR DEST,SRC |
按位异或送到DEST |
| TEST DESC,SRC |
按位与,但是不送到DEST,仅影响状态标志 |
| SAL/SHL OPRD count |
算术左移/逻辑左移(同) |
| SAR/SHR OPRD count |
算术右移/逻辑右移(同) |
| ROL OPRD count |
循环左移 |
| ROR OPRD count |
循环右移 |
| RCL OPRD count |
带进位循环左移 |
| RCR OPRD count |
带进位循环右移 |
| SHLD OPRD1,OPRD2,count |
双精度左移 |
| SHRD OPRD1,OPRD2,count |
双精度右移 |
0x04 状态标志操作指令
六个进位标志作用:
1.进位标志主要反映算术运算是否产生进位或者借位。
2.零标志反映运算结果是否为0
3.符号标志反映运算结果的符号位
4.溢出标志反映有符号数加减是否引起溢出
5.奇偶标志反映运算结果的最低字节中含有1的位数是奇数还是偶数
6.辅助进位标志反映算术运算中第三位是否产生进位或者错位
| 指令 |
作用 |
| STC |
置进位标志指令,使进位标志CF为1 |
| CMC |
进位标志指令取反指令,使进位标志CF取反 |
| LAHF |
获取状态标志操作,把标志寄存器的低八位送到通用寄存器AH中 |
| SAHF |
设置标志状态操作指令,使得状态标志SF、ZF、AF、PF和CF分别成为来自寄存器AH中对应位的值 |
| CLC |
清进位标志指令,使进位标志CF为0 |
0X05 比较指令
CMP DEST,SRC 根据DESC和SRC的差来将结果送到标志寄存器,但是不把结果的差送到DEST
0X06 条件转移指令
| 指令格式 |
作用 |
| JZ/JE |
相等转移 |
| JNZ/JNE |
不相等转移 |
| JS |
为负转移 |
| JNS |
为正转移 |
| JO |
溢出转移 |
| JNO |
不溢出转移 |
| JP/JPE |
偶转移 |
| JNP/JPO |
奇转移 |
| JB/JNAE/JC |
低于转移 |
| JNB/JAE/JNC |
不低于转移 |
| JBE/JNA |
不高于转移 |
| JNBE/JA |
高于转移 |
| JL/JNGE |
小于转移 |
| JNL/JGE |
不小于转移 |
| JLE/JNG |
不大于转移 |
| JNLE/JG |
大于转移 |
| JCXZ |
计数器CX为0转移 |
| JECXZ |
计数器ECX为0转移 |