汇编逆向常用语句
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转移 |