mm475 发表于 2014-12-26 07:37

汇编资料——SETE的赋值

昨天发了个帖子https://www.52hb.com/thread-3844-1-1.html
在昨天的逆向分析中遇到了sete的 赋值,以前这样赋值的不多,一般用mov赋值。特查阅资料供大家参考!
005622D7|.0F9403      sete byte ptr ds:这里会让我们的断点数值变为0修改方案005622D7      C603 01       mov byte ptr ds:,0x1以下是我找的资料!不要忽视任何赋值的语句!才能使我们更快的逆向
SETBE/SETNA 小于等于/不大于 CF=1 或 ZF=1

SETE/SETZ 等于/为零 ZF=1
SETNE/SETNZ 不等于/不为零 ZF=0

SETG/SETNLE 大于/不小于等于(带符号) SF=0 或 ZF=0
SETGE/SETNL 大于等于/不小于(带符号) SF=0
SETL/SETNGE 小于/不大于等于(带符号) SF=1
SETLE/SETNG 小于等于/不大于(带符号) SF=1 或 ZF=1

SETC 有进位或借位 CF=1
SETNC 无进位或借位 CF=0

SETO 有溢出 OF=1
SETNO 无溢出 OF=0

SETP/SETPE 低8位1的个数为偶数 PF=1
SETNP/SETPO 低8位1的个数为奇数 PF=0

SETS 结果为负 SF=1
SETNS 结果为正 SF=0

其中在CE中SETNC指令相当于SETNE,一般都会把SETNE写成SETNC。
例如:
CMP EAX,EBX
SETNC CL //如果EAX不=EBX,那么CL=01,否则CL=00
CMP EAX,ECX
SETE //如果EAX=ECX,那么0x20401000处=01,否则=00
注意目标为地址时,不需要用 XXXX PTR 来区分数据的操作长度。

同样在修改时,如果不知道前面判定的结果会是什么,那么可以直接把
SETE AL改成MOV AL,01或者是MOV AL,00这两种指令,来看游戏中的实际影响。
SETE AL指令占3字节,MOV AL,01指令占2字节,再补上一个NOP指令,正好可以替换

htqweszxc 发表于 2014-12-26 08:54

谢谢分享学习学习

Scar-疤痕 发表于 2014-12-26 09:50

谢谢475那么不辞辛苦为朋友们分享教程!

逍遥枷锁 发表于 2014-12-26 10:06

实在不错的汇编判断与条件 out,真好。

520Kelly 发表于 2014-12-26 13:04

说得好深奥,真的是没理解

attackmyth 发表于 2020-2-18 18:05

感谢分享。学到知识了。
一开始我只懂sete 和 setne 的赋值
sete al
我简单阐述下我的理解
即取标志寄存器中ZF的值, 放到AL中. SETNE取得ZF值后, 取反, 再放到AL中.
和mov 不同的是 sete占三个字节 mov 只占2字节逆向的时候怕后面回头看的时候看不懂可以改成mov 补充一个Nop即可

别管我了行 发表于 2022-2-25 02:32

不苦小和尚 发表于 2022-2-27 10:20


[快捷回复]-软件反汇编逆向分析,软件安全必不可少!

小船 发表于 2022-4-17 20:25

sete al    如果 ZF = 0AL=0   ZF=1 AL=1

4957465 发表于 2022-4-18 05:54

页: [1] 2 3
查看完整版本: 汇编资料——SETE的赋值