码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-07-05 19:33:31      阅读:73      评论:0      收藏:0      [点我收藏+]

标签:order   word   dash   存储   ash   idt   作用   http   执行   

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

 

 

  

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

标签:order   word   dash   存储   ash   idt   作用   http   执行   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!