• 硬编码02


    2.经典定长指令(修改EIP)

    (I立即数)(d DWORD)(b BYTE)

    无符号 0-FF(正数)
    有符号 0-7F(正数)80-FF(负数)
    0x70 - 0x7F(后跟一字节立即数偏移,有符号)
    最大值:0-7F(向前跳)8F-FF(向后跳)
    0x70 JO
    0x71 JNO
    0x72 JB/JNAE/JC
    0x73 JNB/JAE/JNC
    0x74 JZ/JE
    0x75 JNZ/JNE
    0x76 JBE/JNA
    0x77 JNBE/JA
    0x78 JS
    0x79 JNS
    0x7A JP/JPE
    0x7B JNP/JPO
    0x7C JL/JNGE
    0x7D JNL/JGE
    0x7E JLE/JNG
    0x7F JNLE/JG

    0x0F 0x80 - 0x0F 0x8F(后跟四字节立即数偏移,有符号)
    最大值:0-7FFFFFFF(向前跳)8FFFFFFF-FFFFFFFF(向后跳)
    跳转到地址 = 当前指令地址 + 当前指令长度 + Ib
    0x0F 0x80 JO
    0x0F 0x81 JNO
    0x0F 0x82 JB/JNAE/JC
    0x0F 0x83 JNB/JAE/JNC
    0x0F 0x84 JZ/JE
    0x0F 0x85 JNZ/JNE
    0x0F 0x86 JBE/JNA
    0x0F 0x87 JNBE/JA
    0x0F 0x88 JS
    0x0F 0x89 JNS
    0x0F 0x8A JP/JPE
    0x0F 0x8B JNP/JPO
    0x0F 0x8C JL/JNGE
    0x0F 0x8D JNL/JGE
    0x0F 0x8E JLE/JNG
    0x0F 0x8F JNLE/JG

    例子1:

    公式:跳转到地址 = 当前指令地址 + 当前指令长度 + Ib

    00444243 = 0x004441EC( 当前指令地址)+2(当前指令长度) + 0x55(Ib)

    例子2:

    公式:跳转到地址 = 当前指令地址 + 当前指令长度 + Ib

    00444243 = 0x004441EC(当前指令地址)+0x2(当前指令长度) + 0xF0(有符号=-16)[00444243 = 004441EC +2 - 0x10]

    3.其它指令

    计算:0044421A=00444228+(2)指令长度+F0(有符号数-16);
    00444228 E2 F0 loopd short 1.0044421A

    0xE0 LOOPNE/LOOPNZ Ib (Jb) 共2字节
    ECX = ECX - 1 当ZF = 0 && ECX!=0 时跳转到 当前指令地址 + 当前指令长度 + Ib

    0XE1 LOOPE/LOOPZ Ib (Jb) 共2字节
    ECX = ECX - 1 当ZF = 1 && ECX != 0 时跳转到 当前指令地址 + 当前指令长度 + Ib

    0XE2 LOOP Ib (Jb) 共2字节
    ECX = ECX - 1 当 ECX!=0 时跳转到 当前指令地址 + 当前指令长度 + Ib

    0XE3 JrCXZ Ib (Jb) (在32位模式中,rCX为ECX) 共2字节
    当 ECX = 0 时跳转到 当前指令地址 + 当前指令长度 + Ib
    (自己控制步长)

    0xE8 CALL Id (Jd) 共5字节
    CALL指令的下一条指令地址入栈后,跳转到 当前指令地址 + 当前指令长度 + Id

    0xE9 JMP Id (Jd) 共5字节
    跳转到 当前指令地址 + 当前指令长度 + Id

    8个段寄存器: ES CS SS DS FS GS LDTR TR (顺序固定)
    (段寄存器实际是个结构体,共96位,其中仅16位是汇编指令可以访问到的)

    0xEA JMP Ap (Ap:六字节长度的直接地址) 共7字节
    JMP CS:Id 将Ap中的高2位赋值给CS,低4位直接赋值给EIP, 即跳转

    004183D7 > EA 12345678 1B00 JMP FAR 001B:78563412

    0xEB JMP Ib (Jb)
    跳转到 当前指令地址 + 当前指令长度 + Ib

    0xC3 RET 共1字节
    EIP出栈

    0xC2 RET Iw 共3字节
    EIP出栈后,ESP = ESP + Iw

    0XCB RETF (return far) 共1字节
    出栈8个字节,低4个字节赋值给EIP,高4个字节中低2位赋值给CS

    0xCA RETF Iw 共3字节
    出栈8个字节,低4个字节赋值给EIP,高4个字节中低2位赋值给CS后,ESP = ESP + Iw
    ret -> pop eip
    retf -> pop eip, pop cs

  • 相关阅读:
    java注解-笔记
    java重载与重写-笔记
    java中(equals与==)- 笔记
    Java迭代与递归-笔记
    C++指针悬挂-笔记
    极速倒入sql记录到excel表格,19个子段5万条记录只需30秒
    利用MCI的方法可以方便的实现光驱门的开关
    如何让你的程序在任务列表隐藏
    如何实现遍历文件夹中的所有文件
    识别操作系统版本
  • 原文地址:https://www.cnblogs.com/Besttwuya/p/14319923.html
Copyright © 2020-2023  润新知