[逆向]汇编JCC指令满足条件时跳转以及cmp test
时间:2022-08-16 11:00:00
一.JCC 目标操作数 :立即数(实际上是跟随地址)
如下图所示:
jcc根据标志位置和比例大小判断条件是否成立,成立后实施跳转
二.根据标志位置进行判断
根据上学的CF PF ZF SF OF来判断,比如JZ转移条件是ZF=1,JNZ转移条件是ZF=中间N是相反的意思,
同理可推出JC JNC JP JNP JS JNS JO JNO等.
三.判断比大小
1.无符号
三个基本的,JA(大于) JB(小于) JE(等于),以下可引申:
ja---->大于
jna--->小于等于
jae--->大于等于
jnae--->小于
jb-->小于
jnb-->大于等于
jbe--->小于等于
jnbe--->大于
2.有符号
同样,首先要记住三个基本的,JG(大于) JL(小于) JE(等于),以下可引申:
Jge--->大于等于
jnge--->小于
jl--->小于
jnl--->大于等于
jle--->小于等于
jnle-->大于
jng-->小于等于
四.cmp 算术比较
cmp 目标操作数、源操作数
目标操作数是寄存器内存,源操作数可以是寄存器 内存 和立即数
功能:减法,结果丢弃,影响标志位置
例如,在上图中,无符号操作不满意小于,因此没有跳到lab,相反,它是直接执行的号操作,满足小于,程序执行跳转
五.test 逻辑运算
test 目标操作数、源操作数
目标操作数是寄存器内存,源操作数可以是寄存器 内存 和立即数
功能:与运算,结果丢弃,影响标志位ZF PF SF,把CF和OF清0,也就是说jnc和jno必跳
如上图所示,80和9的运算,即1000 0000 和1001 结果是0万万 0000.显然满足jz因此,跳转的条件是实施的.
今天的文章到此为止。如果你什么都不懂,欢迎和我交流。我一定知道一切。这篇文章也付出了一定的努力。喜欢的朋友可以表扬和关注。非常感谢!