【逆向】第八章 JCC


一、指令

EIP:是指CPU下一条准备读取的指令的地址
一般不可以写mov eip

1.JMP指令

JMP + 地址
直接可以跳转到该地址指令,此时EIP的值变化,可以理解为MOV EIP,地址

2.call指令

call + 地址
同JMP一样,可以直接跳到地址
注意执行前按下F2下断点
它同JMP的区别是在堆栈图中会栈顶的内容会变成该call指令下一条指令前的地址,算法是call指令地址加上对应call指令前的字节数,这里是5所以是5A+5=5F在这里插入图片描述

3.RETN指令

此处与call指令相对,跳转到call的下一行,call所push的值也会删除,EIP的值也会改变

4.CMP指令

减法,和cmp一样结构相同,但是它不会把相减的结果保留到被减数中,只是影响标志寄存器的值
cmp是用来比较两个值的大小是不是相等,看Z位
cmp也可以进行比较,此时看SF,符号位,S为1说明第一个数比第二个数小
也可以进行内存和寄存器比较,但是要数据宽度一样

5.test指令

结果不保存,进行与操作,与自己与操作,结果会全是0,此时Z为0

二、JCC

1.JE,JZ

JE:两个数相等就jmp
JZ:ZF相等就跳转
不相同的话就执行下一条
也就是说JE和JZ本质上差不多,反汇编可能只会显示一样,但是可能会显示其中一种

2.JNE,JNZ

不相等,或者ZF=0跳转

3.JS

SF=1
结果为负,跳转

4.JNS

SF= 0
结果为非负跳转

5.JP

PF=1跳转,结果1的个数为偶数跳转

6.JNP

PF=1,结果为1的个数的奇数跳转

7.JO

结果溢出跳转 OF=1

8.JNO

结果没有溢出跳转 OF=0

9.JB JANE

below above not equal
小于(无符号)跳转CF =1

10.JNB

不小于则跳转
CF=0(无符号)CF=0

11.JBE

小于等于跳转(无符号) CF =1 或ZF = 1

12.JA

大于则跳转(无符号) CF =0 且ZF = 0

13.JL

小于跳转(有符号)SF不等于OF

14.JNE

大于等于跳转(有符号)SF = OF

15.JLE

小于等于跳转(有符号)ZF = 1 or SF!=OF

JNLE

大于则跳转(有符号)ZF = 0 or SF=OF

猜你喜欢

转载自blog.csdn.net/qq_46441427/article/details/112792998
jcc