zoukankan      html  css  js  c++  java
  • 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

      

  • 相关阅读:
    CVPR顶会热词统计
    @Annotation学习
    把一张表已有的数据对另一张表数据进行修改
    两张表数据不一致进行对比
    学习借鉴
    借鉴tcp
    借鉴tcp
    osi七层
    http学习
    Json学习
  • 原文地址:https://www.cnblogs.com/codexlx/p/13246994.html
Copyright © 2011-2022 走看看