之前可以修改EIP寄存器的指令
JMP,CALL,RETN
所有JCC指令的动作->根据标志寄存器修改EIP的值
标志寄存器 EFLAGS
CF(bit 0)[Carry flag] C位
若算术产生的结果在最高有效位(most-significant bit)发生进位或者借位则将其置1 反之清零
这个标志通常用来指示无符号证书运算的溢出状态
MOV AL,0xFE ADD AL,2 C => 1 MOV AL,0x7F SBU AL,0xFF C => 1
PF (bit 2) [parity flag] P位
如果结果的最低有效字节 最后一个字节
(least-significant byte)包含偶数个1位则该位置1,否则清零
利用PF可进行奇偶校验检查
需要传输1100 1110
,数据中含5个1
,所以其奇校验位位0
,同时吧1100 1110
传输给接收方,
接收方收到数据后再一次计算奇偶性,1100 1110
中仍然含有5个1
,所以接收方计算出的奇偶验位还是0
,与发送方一致,表示在此次传输过程中未发生错误。
例子:
MOV AL,0xCE
AF (bit 4)[Auxiliary Carry Flag] 辅助进位标志器
如果算术操作在结果的第三位发生进位或者借位则该标志置1,否则清零
这个标志在BCD(binary-code decimal) 算术运算中被使用
ZF(bit 5)[Zero Flag] 用的最多 划重点。。
若结果为0则将其置1,反之清零。
经常与CMP或者TEST等指令一起使用
例1: 判断2个值是否相等
MOV EAX,100 MOV ECX,100 CMP EAX,ECX (CMP指令相当于SUB指令,但是相减的结果并不保存到第一个操作数中 只影响标志寄存器)
例2:判断某个值是否为0
AND EAX,EAX 0 ZF=1 TEST EAX,EAX (TEST相当于and,但是与运算的结果并不保存到第一个操作数中 只影响标志寄存器)
SF(bit 7) [Sign Flag]
该标志被设置为有符号整型的最高有效位
(0指示结果为正,反之则为负)
意思其实就是,运算完之后看下符号位 是0(正)还是1(负)
当然如果是无符号数运算就不用看了
例子
MOV AL,0x7F MOV AL,0xFE ADD AL,2 ADD AL,2
OF(bit 11)[OverFlow Flag]
溢出标志OF用于反应有符号数加减运算所得结果是否溢出
可以这样理解:
* 如果是无符号数运算,是否溢出看CF位 * 如果是有符号数运算,是否溢出看OF位
例子:
MOV AL,0x7F ADD AL,2
DF(bit 10)[Diretion Flag]
这个方向标志控制字符串指令(`MOVS`,CMPS,SCAS,LODS以及`STOS`)。设置DF标志是的串指令自动递减(从高地址向低地址方向处理字符串),清楚该标志则是的串指令自动递增 STD以及CLD指令分别用户设置以及清除DF标志
JCC常见指令
有符号和无符号的区别:
CMP AL,CL JG 0x12345678 JA 0x12345678
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论