首页 > 其他分享 >逆向——EFLAGS寄存器

逆向——EFLAGS寄存器

时间:2023-01-15 00:55:41浏览次数:53  
标签:逆向 MOV AL ADD EFLAGS 寄存器 BYTE PTR 溢出

EFLAGS寄存器:

 

 查看DTDEBUG中的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

ADD AL,3

ADD AL,2

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

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

(1)、在字操作时,发生低字节向高字节进位或借位时;

(2)、在字节操作时,发生低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。

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

进位标志表示无符号数运算结果是否超出范围.

溢出标志表示有符号数运算结果是否超出范围.

溢出主要是给有符号运算使用的,在有符号的运算中,有如下的规律:

正 + 正 = 正 如果结果是负数,则说明有溢出

负 + 负 = 负 如果结果是正数,则说明有溢出

正 + 负 永远都不会有溢出.

 

 1、无符号、有符号都不溢出

MOV AL,8

ADD AL,8

2、无符号溢出、有符号不溢出

MOV AL,0FF

ADD AL,2

3、无符号不溢出、有符号溢出

MOV AL,7F

ADD AL,2

4、无符号、有符号都溢出

MOV AL,0FE

ADD AL,80

 

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指令:交换数据

格式:XCHG  R/M,R/M/IMM   两边不能同时为内存  宽度要一样

XCHG AL,CL

XCHG DWORD PTR DS:[12FFC4],EAX

XCHG 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

 

 STOS指令:讲Al/AX/EAX的值存储到[EDI]指定的内存单元

STOS BYTE PTR ES:[EDI]  简写为STOSB

STOS WORD PTR ES:[EDI]  简写为STOSW

STOS DWORD PTR ES:[EDI]  简写为STOSD

 

 

REP指令:按计数寄存器 (ECX) 中指定的次数重复执行字符串指令

MOV ECX,10

REP MOVSD

REP STOSD

 

标签:逆向,MOV,AL,ADD,EFLAGS,寄存器,BYTE,PTR,溢出
From: https://www.cnblogs.com/BDAMBXA/p/17052919.html

相关文章

  • 一些汇编指令寄存器杂谈
    一些汇编指令寄存器杂谈汇编指令之寄存器寄存器学习记录8086寄存器分类:1.通用寄存器(8个):AX、BX、CX、DX和SI、DI、SP、BP2.指令指针(1个):IP3.标志寄存器(1个)......
  • 栈和寄存器虚拟机比较(以python和lua为例)
    指令长度pythonpython的指令定长,长度为16bit,其中8bit操作码,8bit操作数。///@file:Python-3.6.0\Include\code.htypedefuint16_t_Py_CODEUNIT;#ifdefWORDS_BIGEND......
  • 【验证码逆向专栏】某验二代滑块验证码逆向分析
    声明本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删......
  • 在KEIL中如何查看寄存器的值与地址
    正确连接硬件,编译程序后,按下工具栏的调试按钮进入调试模式。然后在View->SystemViwer下,可以按照分类来查看某个寄存器的值。例如RCC相关的寄存器:GPIO相关的寄存器。寄存......
  • HAL库教程11:定时器的缓冲功能与影子寄存器
      在STM32的定时器中,TIMx_PSC、TIM_ARR两个寄存器加上捕捉比较模块中TIMX_CCR寄存器,它们都可以动态修改。不过他们的修改和生效可能不在同一个时刻,或者说,修改过后立即生......
  • asm:8086寄存器概述(intel - reg16bits)
    asm:8086寄存器概述(intel-reg16bits)   一、 4个16位段地址寄存器  1、8086对存储器采用分段管理,4个段寄存器分别用于存放4个当前段的起始地址,又称为段基址寄存......
  • 逆向—堆栈
    假设我们需要一块内存,有如下的要求:1、主要用于临时存储一些数据,如果数量很少就放到寄存器中2、能够记录存了多少数据3、能够非常快速的找到某个数据我们可以这样来设计......
  • 逆向-内存
    一、寄存器与内存的区别:        计算机内存的每一个字节会有一个编号(即内存编号的单位是字节),如下图:  32位计算机的编号最大是32位,也就是32个1换......
  • 逆向-通用寄存器
    32位通用寄存器的指定用途如下:      MOV的语法:r/m8,表示8位的寄存器或内存  MOV目标操作数,源操作数作用:拷贝源操作数到目标操作数1、源操作数可以是......
  • 逆向-数据宽度-逻辑运算
    数据宽度:1、数学上的数字,是没有大小限制的,可以无限的大。但在计算机中,由于受硬件的制约,数据都是有长度限制的(我们称为数据宽度),超过最多宽度的数据会被丢弃。2、4位宽度表......