美文网首页
修改EPI指令

修改EPI指令

作者: 欧皇ff | 来源:发表于2020-04-02 11:40 被阅读0次

    EIP 寄存器 指向CPU下一次要执行的程序地址。

    指令 注释 用法
    JMP 修改EIP的值 JMP r/m/imm
    CALL 修改EIP的值,入栈CALL指令下一行的程序地址 CALL r/m/imm
    RET 出栈CALL指令入栈的程序地址到EIP RET

    JMP 指令:jmp相当于 mov eip,r/m/imm

    由下图可见,不支持直接mov eip的值(Intel并没有提供mov eip支持)。


    mov eip,imm
    //EIP改变 程序跳转到空白(堆栈外的地址)
    JMP 1
    
    jmp 1 结果
    jmp 0044335A
    jmp eax
    jmp dword ptr ds:[0x0012FFCC]
    
    jmp 0044335A

    CALL 指令:

    1. 修改EIP的值
    2. call指令下面一行指令的地址存入堆栈
    3. esp地址减4
      (2、3步骤相当于 PUSH CALL指令下面一行指令的地址)
      注:CALL指令在DTDebug中按F7执行。
    CALL 0044335C 结果
    CALL 0044335C
    
    MOV EAX,0044335C
    CALL EAX
    
    MOV DWORD PTR DS:[0012FFC8],0044335C
    CALL DWORD PTR DS:[0012FFC8]
    //1 
    //自定义实现CALL
    jmp 0044335C
    push 00443355
    //2 解释push
    jmp 0044335C
    mov 0012ffC0 00443355
    sub esp,4
    

    思考:
    还可以怎么实现CALL指令功能?

    RET 指令:

    1. ESP加4
    2. EIP重新指向栈顶指向指令地址
    RET
    //
    RETN
    //1
    jmp dword ptr ds:[esp]
    add esp,4
    

    思考:
    如何自定义实现RETN?

    相关文章

      网友评论

          本文标题:修改EPI指令

          本文链接:https://www.haomeiwen.com/subject/nzitphtx.html