常见寄存器与汇编指令

学习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

posted @ 2023-02-26 18:45  gvpn  阅读(170)  评论(0编辑  收藏  举报