汇编逆向常用语句

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转移