EIP指令与修改EIP的值——JMP、CALL、RET

1.作用:

  ESP寄存器存储的值是CPU下次要执行的地址。ESP中存的是什么,CPU下次就会找对应的地址中的指令。

2.修改EIP的值:JMP指令

  • 可以通过JMP指令修改EIP的值: JMP 00217C51
  • JMP后面还能跟一个寄存器:JMP EAX
  • 还可以跟内存:JMP DWORD PTR DS:[0018FFA1]——注意这里只能跟DWORD

3.修改EIP的值:CALL指令

(1)CALL指令的使用:CALL  立即数/寄存器/内存

  

使用CALL指令调用0021 7AA8位置的指令:(调用CALL指令需要使用F7)

  

可以看到CALL指令做了两件事:

  • 修改了EIP的值为接下来要执行的语句的地址
  • 把当前CALL指令的下一条指令的地址存入的栈中

 (2)如何使用基础指令实现CALL指令的功能:

。。。

4.修改EIP的值:RET指令

使用RET指令:

(1)执行指令前:

  • RETN指令对应的地址——0021 7C2F
  • ESP——00B3 F960
  • EIP——0021 7C2F
  • ESP对应的栈内容——7613 6359

  

 (2)执行指令结束结束:

   

 (3)可以看到,发生如下变化:

  • ESP增加了4(4字节)——00B3 F964
  • EIP变成了下一个栈指针内存储的值——7613 6359

即RET做的事:

  把当前栈顶里面存的这个值,放到EIP里面。同时让栈顶指针加4

  

原文地址:https://www.cnblogs.com/codexlx/p/13246994.html