一.JMP指令:修改EIP的值
JMP EAX=MOV EIP,EAX(虽然这条指令无法执行)
例子
此时我们执行JMP,EAX
二.CALL指令
CALL EAX=PUSH 地址B && MOV EIP,EAX
例子
圈起来的那部分是我们下的断点,点击编号然后按F2就会有这种效果,接着我们执行CALL 0x4012C5
此时可以看到ESP和EIP都改变了
三.RET指令
本质:POP EIP
例子:
之后我们执行RET
可以看到此时它跳回了0x401285,而且EIP的值变为了0x401285,ESP的值复原
四.CMP指令
该指令是比较两个操作数,相当于SUB指令,但是相减的结果并不保存到第一个操作数中
只是根据相减的结果来改变ZF标志位,当两个操作数相等时,ZF标志位值为1
当然,如果前一操作数小于后一操作数,SF标志位值变为1
主要是影响标志寄存器的值
例子:
然后执行CMP ESI,EDI
此时我们看到ESI,EDI的值没有变,ZF变成了Z1
五.TEST指令
该指令在一定程度上和CMP指令类似的,两个数值进行“与”操作,结果不保存,但是会改变相应标志位
常见用法:用这个指令可以确定某寄存器值是否为0
然后我们执行TEST ECX,ECX
此时可以看到ZF标志位值为1