当前位置: 首页 > article >正文

软件逆向之标志位

进位标志CF(Carry Flag)

  • 介绍:如果运算结果的最高位产生了一个进位(加法)或借位(减法),那么,其值为1,否则其值为0。无符号数。

  • 示例:

    mov al,0xFF
    add al,0x2
    

奇偶标志PF(Parity Flag)

  • 介绍:奇偶标志PF用于反映运算结果中(最低有效字节中)1的个数的奇偶情况。偶数个"1"时,PF为1,否则为0

  • 示例:

    mov al,0x3
    add al,0x3 //6  0110  2个"1"  偶数
    add al,0x2 //8  1000  1个"1"  奇数
    
    • 偶数示例:


    • 奇数示例:


辅助进位标志AF(Auxiliary Carry Flag)

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

    1. 在字(word、dword等)操作时,发生低字节向高字节进位或借位时;
    2. 在字节操作时,发生低4位向高4位进位(加法)或借位(减法)时。
  • 示例:

    mov eax,0x55EEFFFF
    add eax,2
    
    mov ax,0x5EFE
    add ax,2
    
    mov al,0x5E
    add al,2
    
    mov ah,0x5E
    add ah,2
    

零标志ZF(Zero Flag)

  • 介绍:零标志ZF用来反映运算结果是否为0。如果运算结果为0, 则其值为1, 否则其值为0。在判断运算结果是否为0时,可使用此标志位。

  • 示例:

    xor eax,eax
    
    mov eax,2
    sub eax,2
    

符号标志SF(Sign Flag)

  • 介绍:符号标志SF用来反映运算结果的符号位,它与运算结果的最高位相同。在二进制数中,最高位指的是最左侧的位。最高位也称为符号位,在有符号数中,它用来表示数字的正负(0表示正,1表示负)。符号标志位,记录相关指令执行后,其结果是否为负,如果结果为负,则sf = 1,如果结果为非负,则sf = 0。

  • 示例:

    mov al,0x7F
    add al,0x2 // 81    1000 0001  最高位为1->负数   SF = 1
    

溢出标志位OF(Overflow Flag)

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

    1. 无符号数:0……FF
    2. 有符号数: 正数:0……7F 负数:80……FF
  • 示例:

    无符号溢出、有符号不溢出 //8位无符号整数范围:0~255  超出范围从0开始
    mov al,0xff
    add al,0x2 //1   257    0001 0000 0001
    
    无符号不溢出、有符号溢出  //8位有符号整数范围:-128 ~ 127 
    mov al,0x7f
    add al,0x2 //81   129 > 127    1000 0001
    
    无符号、有符号都溢出
    mov al,fe
    add al,0x80 
    //无符号溢出原因:当al的值为254,再加128理论上应该是382,超出了无符号整数范围,发生了溢出
    //有符号溢出原因:al是8位寄存器,只能存储-128 ~ 127,0x80为128,超出了最大范围,发生了溢出
    

补充

补码运算:正数为原码本身,负数为原码取反加一
127为正数,其补码为原码0111 1111
-127为负数,其补码为原码0111 1111,取反1000 0000,加一,1000 0001。

0xFFFF :
要想转换为十进制,可以先转换为二进制,即1111 1111 1111 1111
最高位为符号位,1代表负数
你的问题相当于求其真值,公式为除过符号位其他位取反加一,即
1111 1111 1111 1111 ->1000 0000 0000 0000 ->1000 0000 0000 0001他就是十进制-1

最高位进位与溢出的区别:

进位标志CF表示无符号数运算结果是否超出范围。
溢出标志OF表示有符号数运算结果是否超出范围。
溢出主要是给有符号运算使用的,在有符号的运算中,有如下的规律:

正 + 正 = 正,如果结果是负数,则说明有溢出。
负 + 负 = 负,如果结果是正数,则说明有溢出。
正 + 负,永远都不会有溢出

总结

  • CF针对无符号数(将寄存器中的操作数都看作是无符号数)
  • OF针对有符号数(将寄存器中的操作数都看作是有符号数)
  • 有符号无符号指的是最高位是否是符号位,即是以补码的形式看待还是以原码的形式看待。



http://www.kler.cn/a/467712.html

相关文章:

  • 《Vue3实战教程》19:Vue3组件 v-model
  • 从configure.ac到构建环境:解析Mellanox OFED内核模块构建脚本
  • ECCV`24 | 首次解决文本到3D NeRFs分解问题!港中文等提出DreamDissector
  • PINN模型详解
  • 51单片机——8*8LED点阵
  • [论文笔记]Representation Learning with Contrastive Predictive Coding
  • 【测试工具】 Postman 基本使用
  • 【Linux】调度优先级(谦让度)
  • spring、spring boot、Springmvc 的区别和关系
  • k8s集群部署 - Dashboard v2.7
  • MySQL 8 主从同步配置(Master-Slave Replication)
  • ESP32移植Openharmony外设篇(7)土壤湿度传感器YL-69
  • Python进阶-08-继承性
  • 编译 C++ 程序:分离与保留调试信息以支持 GDB 对 Core 文件的调试
  • 如何自行解锁 ATamp;T 手机
  • UE5 slate创建SDockTab标签页的过程理解
  • Megatron - LM 怎么进行模型切分的,怎么匹配服务器的
  • 量子力学复习
  • STM32学习之MPU6050芯片 及 软件I2C读写MPU6050实验
  • linux命令行连接Postgresql常用命令
  • 【高阶数据结构】哈希表封装unordered_map、unordered_set
  • 【论文阅读】Anchor-based fast spectral ensemble clustering
  • 微服务保护—Sentinel快速入门+微服务整合 示例: 黑马商城
  • 我用AI学Android Jetpack Compose之Jetpack Compose学习路径篇
  • 字符串中常用函数
  • 时序优化方法