逆向_05标志寄存器及少量汇编学习

  1. 标志寄存器
    1. 标志寄存器结构图
    2. 几个重要的标志寄存器
    3. 指令学习

标志寄存器

标志寄存器结构图

mark

  • 记忆CF/PF/AF/ZF/SF/OS的位置
  • OD中EFLAGS寄存器存了这几个寄存器的值,学会拆EFLAGS的值

几个重要的标志寄存器

  • 进位标志寄存器(CF carry Flag):如果运算结果最高位产生了一个进位或借位,那么其值位1,否则为0

  • 奇偶标志寄存器(PF Parity Flag):奇偶编制PF用于反映运算结果中“1”的个数的奇偶性

  • 辅助进位标志寄存器(AF Auxiliary Carry Flag)

    • 发生下列情况时,辅助进位标志AF的值被置为1,否则其值为0:

      1. 在字操作时,发生低字节向高字节进位或者借位时
      2. 在字节操作时,发生低4位向高四位进位或借位时
  • 零标志寄存器(ZF Zero Flag):零标志ZF用来反映运算结果是否为0。如果运算结果为0,则其值为0。在判断运算结果是否为0时,可使用此标志位。

  • 符号标志寄存器(SF Sign Flag):符号标志SF用来反映运算结果的符号位,它与运算结果的最高位相同

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

    • 最高位进位与溢出的区别:
      • 进位标志表示无符号数运算结果是否超出范围
      • 溢出标志表示有符号位运算结果是否超出范围
      • 溢出主要给有符号运算使用的,在有符号的运算中,有如下规律:
        1. 正 + 正 = 正,如果结果为负数,则说明有溢出
        2. 负 + 负 = 负,如果结果为正数,则说明有溢出
        3. 正 + 负 永远都不会有溢出
        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/IMM 两边不能同时为内存,宽度要一样
      • SBB AL,CL
      • SBB BYTE PTR DS:[12FFC4],2
      • SBB BYTE PTR DS:[12FFC4],AL
  • XCHG指令:交换数据
    • 格式:XCHG R/M,R/M,两边不能同时为内存,宽度要一样
    • 例子
      • XCHG AL,CL
      • XCHG DWORD PTR DS:[12FFC4],EAX
      • XCHG BYTE PTR DS:[12FFC4],AL
  • MOVS指令:数据移动,内存-内存
    • MOVS BYTE PTR DS:[EDI],BYTE PTR DS:[ESI] 简写为:MOVSB
    • MOVS WORD PTR DS:[EDI],WORD PTR DS:[ESI] 简写为:MOVSW
    • MOVS DWORD PTR DS:[EDI],DWORD PTR DS:[ESI] 简写为:MOVSD
    • 执行完成之后,edi/esi的值加相应的宽度,将标志寄存器D改为1,edi/esi的值减相应的宽度
  • STOS指令:将al/ax/eax的值存到[EDI]指定的内存单元
    • STOS BYTE PTR ES:[EDI] 简写为:STOSB
    • STOS WORD PTR ES:[EDI] 简写为:STOSW
    • STOS DWORD PTR ES:[EDI] 简写为:STOSD
    • 执行完成之后,edi的值加相应的宽度,将标志寄存器D改为1,edi的值减相应的宽度
  • REP指令:按计数寄存器(ECX)中指定的次数重复执行字符串指令
    • MOV ECX,10
    • REP MOVSD
    • REP STOSD

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 787772394@qq.com

文章标题:逆向_05标志寄存器及少量汇编学习

本文作者:二豆子·pwnd0u

发布时间:2020-09-08, 17:47:39

最后更新:2023-05-18, 09:49:36

原始链接:http://blog.codefat.cn/2020/09/08/%E9%80%86%E5%90%91-05%E6%A0%87%E5%BF%97%E5%AF%84%E5%AD%98%E5%99%A8%E5%8F%8A%E5%B0%91%E9%87%8F%E6%B1%87%E7%BC%96%E5%AD%A6%E4%B9%A0/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏

/*爱心代码*/ /*雪花效果*/ /*百度代码自动提交*/