滴水逆向笔记(八)

一.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

猜你喜欢

转载自blog.csdn.net/m0_51295934/article/details/122696341