经典定长指令-修改EIP
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的更多相关文章
- 经典变长指令ModR/M
变长指令 不是所有的指令都是,看到opcode就知道有多长(定长指令),当指令中出现内存操作对象的时候,就需要在操作码后面附加一个字节来进行补充说明,这个字节被称为ModR/M. 该字节的8个位被分成 ...
- 经典变长指令SIB
前言 ModR/M字段是用来进行内存寻址的,可当地址形如DS:[EAX + ECX*2 + 12345678]时,仅仅靠ModR/M字段,是描述不出来的. 这时就在ModR/M后面增加一个SIB字节, ...
- 经典变长指令-ModRM
一.如何计算ModRM 0X88 MOV Eb,Gb G:通用寄存器 0X89 MOV Ev,Gv E:寄存器/内存 0X8A MOV Gb,Eb b:字节 0X8B MOV Gv,Ev v:Word ...
- 经典变长指令-RegOpcode
一.回顾Mod/M结构 Intel 64 and IA-32 Architectures Instruction Format ModR/M结构图 Mod与R/M共同描述E的意义(内存或者通用寄存器) ...
- 汇编指令之JMP,CALL,RET(修改EIP的值!!!)
简单介绍了,JMP指令按市面上的意思来说是跳转到指定地址,但我这里不这么说,JMP, CALL, RET三个指令均为修改EIP值的指令,EAX, ECX, EBX, EDX, ESP, EBP, ES ...
- 报文格式:xml 、定长报文、变长报文
目前接触到的报文格式有三种:xml .定长报文.变长报文 . 此处只做简单介绍,日后应该会深入学习到三者之间如何解析,再继续更新.——2016.9.23 XML XML 被设计用来传输和存储数据. H ...
- 定长内存池之BOOST::pool
内存池可有效降低动态申请内存的次数,减少与内核态的交互,提升系统性能,减少内存碎片,增加内存空间使用率,避免内存泄漏的可能性,这么多的优点,没有理由不在系统中使用该技术. 内存池分类: 1. ...
- (入门篇 NettyNIO开发指南)第五章-分隔符和定长解码器使用
TCP 以流的方式进行数据传输上层的应用协议为了对消息进行区分,往往采用如下4种方式. (1)消息长度固定,累计读取到长度总和为定长LEN 的报文后,就认为读取到了一个完整的消息,将计数器置位, ...
- 通过修改EIP寄存器实现远程注入
功能:通过修改EIP寄存器实现32位程序的DLL注入(如果是64位,记得自己对应修改汇编代码部分) 原理: 挂起目标进程,停止目标进程EIP的变换,在目标进程开启空间,然后把相关的指令机器码和数据拷贝 ...
随机推荐
- shell脚本 Linux系统安全监测
一.简介 源码地址 日期:2018/4/12 介绍:监测当前Linux系统的安全配置,并给出建议 效果图: 二.使用 适用:centos6+ 语言:中文 注意:无 下载 wget https://ra ...
- ios导出ipa文件
步骤1:选择运行设备,IOS Device 步骤2:选择Product --- Archive开始编译(注意第一步一定要选IOS Device,否则此步Archive为灰sè无法操作) 步骤3:一段 ...
- 关于某 App 请求参数 sign 字段加密分析
受害者: 6ZqG5LyX5pWw5o2u 通过 Charles 抓包发现关键信息请求均携带 sign 参数,且每次请求的值都不一样: 使用 jadx 将对应的 apk 反编译并分析,全局搜素 &qu ...
- Table.PromoteHeaders升降标题Table…Headers(Power Query 之 M 语言)
数据源: 任意数据源 目标: 将第一行提升为标题 操作过程: [主页](或[转换])>[将第一行用作标题] M公式: = Table.PromoteHeaders( 表, [PromoteAll ...
- 这样学习ZooKeeper离大厂所需技能要求还远吗
概述 定义 Apache ZooKeeper是一种用于构建分布式应用的高性能.高度可靠.开源的分布式协调服务,提供如配置信息维护.命名.分布式同步.组服务等功能,可以实现如分布式共识.组管理.领导选举 ...
- C++ 获取函数耗时
C++ 记录耗时 #include <sys/timeb.h> #include <stdio.h> long long getSystemTime() { struct ti ...
- C printf 字符串格式化
%a 浮点数.十六进制数字和p-记数法(C99) %A 浮点数.十六进制数字和p-记法(C99) %c 一个字符 %d 有符号十进制整数 %e 浮点数.e-记数法 %E 浮点数.E-记数法 %f 浮点 ...
- 【LeetCode】1221. Split a String in Balanced Strings 解题报告 (C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 统计 日期 题目地址:https://leetcode ...
- 【LeetCode】242. Valid Anagram 解题报告(Java & Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 字典统计词频 排序 日期 [LeetCode] 题目地址:ht ...
- 【LeetCode】18. 4Sum 四数之和
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 个人公众号:负雪明烛 本文关键词:four sum, 4sum, 四数之和,题解,leet ...