学习ctf中RE模块必须掌握的
寄存器
通用寄存器
32位 | 16位 | 作用 |
---|---|---|
EAX(累加器) | AX | 作用于操作数和结果的数据 |
EBX(基址寄存器) | BX | DS段中的数据指针 |
ECX(计数器) | CX | 用于字符串和循环操作 |
EDX(数据寄存器) | DX | 输入/输出指针 |
EBP(扩展基址寄存器) | BP | SS段中的栈底指针 |
ESI(源变址寄存器) | SI | 字符串操作源指针 |
EDI(目的变址寄存器) | DI | 字符串操作的目的指针 |
ESP(栈指针寄存器) | SP | SS段中的栈顶指针 |
另外
EIP(指令寄存器)
作用:指向下一条将要执行的指令
段寄存器
32 | 16 | 作用 |
---|---|---|
ECS | CS | 代码段寄存器,存放代码段的段基址 |
ESS | SS | 栈段寄存器,存放栈的段基址 |
EDS | DS | 数据段寄存器,存放数据段的段基址 |
EES | ES | 附加段寄存器,存放附加数据段的段基址 |
EFS | FS | 附加段寄存器,存放附加数据段的段基址 |
EGS | GS | 附加段寄存器,存放附加数据段的段基址 |
程序状态与控制寄存器(状态标志)
1 | 1 | 1 |
---|---|---|
CF | 进位标志 | 无符号整数发生溢出时被置为1 |
ZF | 零标志 | 运算结果为0时,其值为1,否则为零 |
OF | 溢出标志 | 有符号整数发生溢出时被置为1 |
SF | 符号标志 | 结果为负,SF=1,结果为非负,SF=0 |
PF | 奇偶标志 | 二进制1的个数为偶数个时,为1 |
DF | 方向标志位 | DF=0时,si,di递增。否则递减 |
汇编指令
常见指令
数据转移指令 | 格式 | 作用 |
---|---|---|
mov | mov dest,src | 将src处的数据转移至dest处,src,dest可以都是寄存器,或者一个是寄存器另一个是内存引用地址,但不能都是内存引用地址 |
lea | LEA reg,mem | 把一个内存变量的有效地址送给指定的寄存器 |
算数运算指令 | 格式 | 作用 |
---|---|---|
ADD | ADD dest,src | 加 |
SUB | SUB dest,src | 减 |
MUL/IMUL | MUL value | 乘 |
DIV/IDIV | DIV divisor | 除 |
逻辑运算符 | 格式 | 作用 |
---|---|---|
AND | AND dest,src | 与 |
OR | OR dest,src | 或 |
XOR | XOR dest,src | 异或 |
NOT | NOT eax | 取反 |
- 循环指令
LOOP
LOOP 标号;
LOOPW 标号;
LOOPD 标号;
- 栈操作指令
push
一个字进栈,系统自动完成两步操作:SP<-SP-2,(SP)<-操作数;一个双字进栈 两步操作ESP<-ESP-4,(ESP)<-操作数
POP
弹出一个字,系统自动完成两步操作:操作数<-(SP),SP<-SP+2;
弹出一个双字,系统两步操作:操作数<-(ESP),ESP<-ESP+4;
- 函数相关
call:子程序调用
ret:返回指令
- 中断指令
int:中断会告诉cpu停止线程的执行
- 比较指令
cmp:比较dest,和src,相当于减操作,不保存结果。然后对标志位产生影响
cmp dest,src
条件转移指令
指令 | 含义 | 测试条件 |
---|---|---|
je/jz | 相等/结果为零 | ZF=1 |
jne/jnz | 不等/结果不为零 | ZF=0 |
js | 结果为负 | SF=1 |
jns | 结果非负 | SF=1 |
jo | 结果溢出 | OF=1 |
jno | 结果未溢出 | OF=0 |
jp | 奇偶位位1 | PF=1 |
jnp | 奇偶位不为1 | PF=0 |
无符号数 | 含义 | 测试条件 |
jb/jnae/jc | 低于/不高于等于/有借位 | CF=1 |
jnb/jae/jnc | 不低于/高于等于/无解位 | CF=0 |
jna/jbe | 不高则转移 | CF=1或ZF=1 |
ja/jnbe | 高于则转移 | CF=0或ZF=0 |
有符号数 | 含义 | 测试条件 |
jl/jnge | 小于则转移 | SF=1且OF=0 |
jnl/jge | 不小于则转移 | SF=0且OF=0 |
jle/jng | 小于等于则转移 | SF=0或OF=1 |
jnle/jg | 高于则转移 | 不小于等于则转移 |
技巧
j-Jump 转移
e-Equal 相同的
n-Not 不
b-Below 小于
a-Above 大于
l-less 更小
g-Greater 更大
s-Sign 负
c-carry 进位为1时
p-Parity 奇偶位为1,1的个数偶数个
o-Overflow 溢出
z-Zero 零
参考
汇编金手指
链接:https://pan.baidu.com/s/1vyBbYJ-niJM2DRbm1ZDQdA
提取码:1234
汇编语言第三版
链接:https://pan.baidu.com/s/13LZVNQEDizsMJrtc7O294g?pwd=1234
提取码:1234