跳地址
JMP
修改eip的值,让程序下一步执行JMP修改EIP的地址
格式:JMP 寄存器/立即数==MOV EIP,寄存器/立即数
注:只影响EIP
CALL
PUSH 地址B
MOV EIP,地址A/寄存器 ==CALL 地址A/寄存器
复制下一个地址,在修改EIP的值
eg:
运行
执行命令后,call下一个指令的地址入栈,ESP减四,EIP被修改
下一个指令地址算法:现地址+指令的字节数(如图有五个字节)
所以call下一个指令地址为004183D7
RETURN
JE、JZ
实质是看标志寄存器的Z位,Z位为1,就跳到相应的地址
结果为零则跳转
格式:JE 地址
JNE,JNZ
看标志寄存器的z位,z位为零,就跳转到相应的地址。
结果不为零则跳转
JS
实质是标志寄存器的s位,S位为1就跳转到相应的地址
结果为负责跳转
JNS
S位为零,就跳转到相应地址
结果为非负则跳转
JP,JPE
P位为1,则跳转到相应地址
结果中1的个数为偶数则跳转
JNP,JPO
P位为零,则跳转到相应地址
结果中1的个数为奇数则跳转
JO
O位为1,则跳转到相应地址
结果溢出则跳转
JNO
O位为零,则跳转到相应地址
结果没有溢出则跳转
JB,JNAE
C位为1则跳转到相应地址
小于则跳转(无符号数)
JNB,JAE
C位为零,则跳转到相应地址
大于等于则跳转(无符号数)
JBE,JNA
C位为一或者z位为一
小于等于则跳转,(无符号数)
JNBE,JA
C位和z位都为零(无符号数)
大于则跳转
JL,JNGE
S位和o位不相等
小于则跳转(有符号数)
JNL,JGE
S位和o位相等
大于等于则跳转(有符号数)
JLE,JNG
Z位=1 或者 s和o位不相等
小于等于则跳转(有符号数)
JNLE,JG
Z位等于零,并且s和o位相等
大于则跳转(有符号数)
只改变标志寄存器
CMP
做减法运算,结果不保存,但改变标志寄存器里的值,其余不变
格式:CNP R/M,R/M/IMM
①代码
运行时EAX,ECX值不变,P 和Z位改变。
③代码
一个寄存器直接与内存比较,只要宽度一样
用途:1)比较两个操作数是否相等———Z位
2)第一位数是否比第二位数大———S位
TEST
两个数值进行与操作,结果不保存,但是会改变相应标志位。
标签:EIP,JCC,跳转,地址,寄存器,相应,位为 From: https://www.cnblogs.com/yuli10952/p/18233139