文章目录
一、指令
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