1、0x70~0x7F

  • EIP无法像通用寄存器那样用mov来修改,只能通过类似于jz,JNB,JNE JBE,call等的跳转指令来进行修改
  • 条件跳转,后跟一个字节立即数的偏移(有符号),共两个字节。
  • 如果条件成立,跳转到当前指令地址+当前指令长度+Ib
  • 最大值:向前跳转7F,向后跳80
0x80    JO
0x81 JNO
0x82 JB/JNA/JC
0x83 JNB/JAE/JNC
0x84 JZ/JE
0x85 JNZ/JNE
0x86 JBE/JNA
0x87 JNBE/JA
0x88 JS
0x89 JNS
0x8A JP/JEP
0x8B JNP/JPO
0x8C JL/JNGE
0x8D JNL/JGE
0x8E JLE/JNG
0x8F JNLE/JG

二、0x0F 0x80 -0x0F 0x8F

  • 条件跳转,后跟四个字节立即数的便宜(有符号),共五个字节
  • 如果条件成立,跳转到 当前指令地址+当前指令长度+Id
  • 最大值:向前跳7FFFFFFF,向后跳80000000
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  JNAE/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

三、其他指令

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

指令包含一个要添加到指令指针寄存器的相对偏移量(例如,JMP  (0 e9),循环)。  

 立即数

一个字节

双字,不管操作数大小属性如何
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

经典定长指令-修改EIP的更多相关文章

  1. 经典变长指令ModR/M

    变长指令 不是所有的指令都是,看到opcode就知道有多长(定长指令),当指令中出现内存操作对象的时候,就需要在操作码后面附加一个字节来进行补充说明,这个字节被称为ModR/M. 该字节的8个位被分成 ...

  2. 经典变长指令SIB

    前言 ModR/M字段是用来进行内存寻址的,可当地址形如DS:[EAX + ECX*2 + 12345678]时,仅仅靠ModR/M字段,是描述不出来的. 这时就在ModR/M后面增加一个SIB字节, ...

  3. 经典变长指令-ModRM

    一.如何计算ModRM 0X88 MOV Eb,Gb G:通用寄存器 0X89 MOV Ev,Gv E:寄存器/内存 0X8A MOV Gb,Eb b:字节 0X8B MOV Gv,Ev v:Word ...

  4. 经典变长指令-RegOpcode

    一.回顾Mod/M结构 Intel 64 and IA-32 Architectures Instruction Format ModR/M结构图 Mod与R/M共同描述E的意义(内存或者通用寄存器) ...

  5. 汇编指令之JMP,CALL,RET(修改EIP的值!!!)

    简单介绍了,JMP指令按市面上的意思来说是跳转到指定地址,但我这里不这么说,JMP, CALL, RET三个指令均为修改EIP值的指令,EAX, ECX, EBX, EDX, ESP, EBP, ES ...

  6. 报文格式:xml 、定长报文、变长报文

    目前接触到的报文格式有三种:xml .定长报文.变长报文 . 此处只做简单介绍,日后应该会深入学习到三者之间如何解析,再继续更新.——2016.9.23 XML XML 被设计用来传输和存储数据. H ...

  7. 定长内存池之BOOST::pool

    内存池可有效降低动态申请内存的次数,减少与内核态的交互,提升系统性能,减少内存碎片,增加内存空间使用率,避免内存泄漏的可能性,这么多的优点,没有理由不在系统中使用该技术. 内存池分类: 1.      ...

  8. (入门篇 NettyNIO开发指南)第五章-分隔符和定长解码器使用

    TCP    以流的方式进行数据传输上层的应用协议为了对消息进行区分,往往采用如下4种方式. (1)消息长度固定,累计读取到长度总和为定长LEN 的报文后,就认为读取到了一个完整的消息,将计数器置位, ...

  9. 通过修改EIP寄存器实现远程注入

    功能:通过修改EIP寄存器实现32位程序的DLL注入(如果是64位,记得自己对应修改汇编代码部分) 原理: 挂起目标进程,停止目标进程EIP的变换,在目标进程开启空间,然后把相关的指令机器码和数据拷贝 ...

随机推荐

  1. 07-Spring5 WebFlux响应式编程

    SpringWebFlux介绍 简介 SpringWebFlux是Spring5添加的新模块,用于Web开发,功能和SpringMvc类似的,WebFlux使用当前一种比较流行的响应式编程框架 使用传 ...

  2. 【划重点】Python遍历列表的四种方法

    一.通过for循环直接遍历 user1 = ["宋江","林冲","卢俊义","吴用"] for user in use ...

  3. 【C++】使用VS2022开发可以在线远程编译部署的C++程序

    前言: 今天没有前言. 一.先来一点C++的资源分享,意思一下. 1.c++类库源码以及其他有关资源.站点是英文的,英文不好的话可以谷歌浏览器在线翻译.http://www.cplusplus.com ...

  4. IOS开发入门教程-总结篇-写给狂热的编程爱好者们

    程序发轻狂,代码阑珊,苹果开发安卓狂!--写给狂热的编程爱好者们 写在前面的话 学习iOS应用程序开发已有一段时间,最近稍微闲下来了,正好也想记录一下前阶段的整个学习过程.索性就从最基础的开始,一步一 ...

  5. 发布iOS应用(xcode5)到App Store(苹果商店) 详细解析

    发布iOS应用(xcode5)到App Store(苹果商店) 详细解析 作者:Memory 发布于:2014-8-8 10:44 Friday IOS 此教程可能不太适合,请移步至最新最全的:201 ...

  6. CF955C Sad powers 题解

    Content 给你 \(q\) 个询问,每次询问 \([l,r]\) 这个区间内满足 \(x=a^p(a>0,p>1)\) 的 \(x\) 的数量. 数据范围:\(1\leqslant ...

  7. CF1481B New Colony 题解

    Content \(n\) 座山排成一行,其中第 \(i\) 座山的高度为 \(h_i\). 有 \(k\) 个巨石依次从第一座山开始滚落.当某个巨石在第 \(i\) 座山时: 如果 \(i=n\), ...

  8. tcp十种状态;关于tcp中time_wait状态(2MSL问题)

    tcp十种状态 注意: 当一端收到一个FIN,内核让read返回0来通知应用层另一端已经终止了向本端的数据传送 发送FIN通常是应用层对socket进行关闭的结果 关于tcp中time_wait状态的 ...

  9. centos使用docker安装ActiveMQ

    拉取镜像 docker pull webcenter/activemq 启动镜像 docker run --name=activemq -itd -p 8161:8161 -p 61616:61616 ...

  10. SpringBoot整合log4j日志框架

    Spring Boot 2.x默认使用Logback日志框架,要使用 Log4j2必须先排除 Logback. 加入修改依赖 <dependency> <groupId>org ...