X86反汇编速成班(条件指令,分支指令、重复指令、寄存器等)

4.3.3大端字节序和小端字节序
4.3.4立即数操作数是一个固定的值,如0x42
     寄存器操作数指向寄存器,如ecx
     内存地址操作数指向感兴趣的值所在的内存地址,一把由[]内包含值、寄存器或方程式组成,如[eax]
4.3.5通用寄存器一般用于存储数据或内存地址,而且经常交换这使用以完成程序
     一些X86指令只能使用特定的寄存器,例如, 乘法和除法指令就只能使用EAX和EDX
     EAX通常存储了一个函数调用的返回值
     EIP指令指针,保存了程序将要执行的下一跳指令在内存中的地址,它的唯一的作用就是告诉处理器接下来要做什么
     lea eax,[ebx+8]将EBX+8的值给EAX,,,,,,和mov eax,ebx+8等价
      mov eax,[ebx+8]加载内存中地址为EBX+8处的数据
     sub eax,0x10   EAX寄存器值减去0X10
4.3.7栈是后入先出
EBP是栈基址寄存器,在函数中会保持不变,因此程序把它当作定位器,来确定局部变量和参数的位置
不用push和pop也可以从栈中读取数据,例如mov eax,ss :[esp]就可以直接访问栈顶
这和pop eax一样,
4.3.8条件指令
最常见的是test和cmp
cmp dst,src    ZF     CF
dst = src       1      0
dst < src       0      1
dst > sec       0      0
4.3.9分支指令
最常见的分支指令是跳转指令
jz loc 如果ZF=1,则跳转
jnz loc 如果ZF=0,则跳转
je loc 和jz类似,通常在cmp指令后使用。如果源操作数与目的操作数相等,则调准
jne loc。。。。。。。。。。。。。。。。。。。。

jg loc 在一条cmp指令做有符号比较之后,如果目的操作数大于源操作数,跳转
jge loc .............................................小于等于
ja loc 与jg类似,但使用无符号比较
jae loc 与jge类似,但使用无符号比较


jl loc 在一条cmp指令做有符号比较之后,如果目的操作数小于源操作数,跳转
jle loc .........................................小于或等于
jb loc 与jl类似,但使用无符号比较
jbe loc 与jle类似,但使用无符号比较


jo loc 如果前一条指令置位了溢出标志位(OF=1),则跳转
js loc 如果符号标志位被置位(SF=1),则跳转
jecxz 如果ECX=0,则跳转
4.3.10重复指令
最常见的数据缓冲区操作指令是movsx\cmpsx\stosx\scasx,其中的x可以是b,w,d(单字节,字,双字节)
ESI源索引寄存器,EDI目的索引寄存器
rep    循环终止条件ECX=0
repe repz   循环终止条件ECX=0 or ZF=0
repne repnz 循环终止条件ECX=0 or ZF=1
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值