逆向:标志寄存器06

本节学习内容:
第一个CRACKME.EXE
EFLAGS寄存器
ADS/SBB/XCHG
MOVS指令
STOS指令
REP指令
接上一节没学完的内容,补充两个指令
1.push指令:
PUSH r32
PUSH r16
PUSH m16
PUSH m32
PUSH imm8/imm16/imm32

2.POP指令
把堆栈里面的值取出来放到一个容器里
POP r16
POP r32
POP m16
POP m32
PUSHAD、POPAD这两个指令稍作了解即可

以下是本节内容
3.EFLAGS寄存器

查看DTDBUG中的EFLAGS的值,然后转换成二进制的形式,并取出CF/PF/AF/ZF/SF/OF的值
记住这几个寄存器的位置和名称
(1)进位标志CF(Carry Flag):如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0。
MOV AL,0xEF
MOV AL,0xFE
ADD AL,2
ADD AL,2

 

(2)奇偶标志PF(Parity Flag):奇偶标志PF用于反映运算结果中“1”的个数的奇偶性。如果“1”的个数位偶数,则PF的值为1,否则其值为0。
MOV AL,3
MOV AL,3
MOV AL,2

(3)辅助进位标志AF(Auxiliary Carry Flag):
在发生下列情况是,辅助进位标志AF的值被设置为1,否则其值为0:
在字操作时,发生低字节向高字节进位或借位时;
在字节操作时,发生低4位向高4位进位或借位时。
MOV EAX,0x55EEFFFF    MOV AX,5EFE    MOV AL,4E
ADD EAX,2         ADD AX,2      ADD AL,2

(4)零标志ZF(Zero Flag),零标志ZF用来反映运算是否为0。如果运算结果为0,则其值为1,否则为0。在判断运算结果是否为0时,可使用此标志位。
XOR EAX,EAX
MOV EAX,2
SUB EAX,2
(5)符号标志SF(Sign Flag):符号标志SF用来反映运算结果的符号位,它与运算结果的最高位相同。
MOV AL,7F
ADD AL,2

(6)溢出标志OF(Overflow Flag):溢出标志OF用于反映有符号数加减运算所的结果是否溢出。如果运算结果超过当前运算位数所能表示的范围,则成为溢出,OF的值被置为1,否则,OF的值被清为0

4.
ADC指令:带进位加法
格式:ADC  R/M,R/M/IMM   两边不能同时为内存   宽度要一样
ADC AL,CL
ADC BYTE PTR DS:[12FFC4],2
ADC BYTE PTR DS:[12FFC4],AL

SBB指令:带借位减法
格式:SBB  R/M,R/M  两边不能同时为内存  宽度要一样
SBB AL,CL
SBB BYTE PTR DS:[12FFC4],2
SBB BYTE PTR DS:[12FFC4],AL

XCHG指令:交换数据
格式:XCGH  R/M,R/M   两边不能同时为内存,宽度要一样
XCGH AL,CL
XCGH DWORD PTR DS:[12FFC4],EAX
XCGH BYTE PTR DS:[12FFC4],AL

MOVS指令:移动数据  内存-内存
BYTE/WORD/DWORD
MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]  简写为:MOVSB
MOVS WORD PTR ES:[EDI],BYTE PTR DS:[ESI]  简写为:MOVSW
MOVS DWORD PTR ES:[EDI],BYTE PTR DS:[ESI] 简写为:MOVSD
 

5.
STOS指令:将AI/AX/EAX的值存储到[EDI]指定的内存单元
STOS BYTE PTR ES:[EDI]   简写为STOSB
STOS WORD PTR ES:[EDI]   简写为STOSW
STOS DWORD PTR ES:[EDI]   简写为STOSD


6.
REP指令:按计数寄存器(ECX)中指定的次数重复执行字符串指令
MOV ECX,10
REP MOVSD
REP STOSD

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值