汇编中修改EIP值的指令

什么是EIP

EIP也是一个寄存器,但不是通用寄存器,原因是它里面存的值,是我们CPU下一次要执行的地址,CPU通过EIP寄存器,找到地址,去执行地址上的指令。

在这里插入图片描述

如何修改EIP的值

可以使用以下指令来修改EIP的值:

指令 格式
jmp jmp 内存/立即数/寄存器
call call 内存/立即数/寄存器
ret ret

jmp指令

jmp指令无条件跳转,之前修改通用寄存器我们可以使用mov指令,但这对于EIP这寄存器来说并不好用,不过我们可以使用jmp这个指令来实现mov指令的功能。
在这里插入图片描述运行结果:
在这里插入图片描述

call指令

之前遇到的指令都按F8步过,但是遇到call指令的时候要按F7步入,这个call起到一个调用子程序的作用。call指令不仅会修改EIP的值,也会修改栈顶指针ES拍的值,如果你不知道什么是堆栈,可以点这里,call指令相对于jmp指令而言,jmp指令对堆栈没有影响,而call指令会影响堆栈

在这里插入图片描述

ret指令

ret指令就是把当前栈顶指针里的值放在EIP里,然后栈顶指针ESP的值+4,这就是它干的事儿,不是返回那个函数的值什么的。

运行前:
在这里插入图片描述
运行后:

在这里插入图片描述

发布了25 篇原创文章 · 获赞 29 · 访问量 4205

猜你喜欢

转载自blog.csdn.net/qq_43573676/article/details/104332334
今日推荐