硬编码基础二(跳转相关)

硬编码基础二(跳转相关)

今天的指令都是跟eip的变动有关

JCC短跳系列跳转

这一系列是条件跳转指令也都是两字节定长,第一个字节是opcode也是跳转条件后一个字节是有符号的偏移长度,当条件成立时会跳转到当前eip + 2 + 操作数的位置

70~7f是二字节jcc指令
在这里插入图片描述

JCC系列跳转

这一系列是6字节定长的跳转指令,与前面的短跳系列不同的地方就是他的操作数是4字节长度这就意味着他的可跳转范围变大了
操作码是0f80~0f8f,是二字节的操作码后面跟着4字节的操作数

在这里插入图片描述

loop相关(2字节)

loop指令是循环指令在执行跳转前会执行ecx–,然后根据ecx(可能还有zf标志位)来判断是否跳转,且loop都为短跳转,毕竟一个循环也不太可能超出一个字节的偏移
loop指令包括了:

  1. loop
  2. loopne
  3. loope

loopne : e0 ib
loope : e1 ib
loop :e2 ib
ib的意思是立即数长度为byte
这边loopz和loope是一个意思,其他两个也一样
在这里插入图片描述

段内jmp相关

jmp包括了

  1. jmp,近距离无条件跳转指令
  2. jecxz/jecxz,顾名思义就是rcx或者ecx为0 的时候跳转
  3. jmp short ,短距离跳转

jmp:e9 id (5字节)
jecxz:e3 ib (2字节)
jmp short : eb ib(2字节)
在这里插入图片描述
在这里插入图片描述

段内call/ret

call是调用指令,他会执行push eip然后在跳转(段内跳转的情况下只push eip,出段就会在push个cs)
call的操作码紧跟jmp
call: e8 id
在这里插入图片描述
ret指令是返回指令,他会pop eip的方式回退到之前的位置
ret : c3
retn: c2 iw 这是多了一步esp = esp + iw一般是stdcall的调用时候会有这种指令
在这里插入图片描述
在这里插入图片描述

跨段跳转相关

首先要了解在32位的Intelcpu下段寄存器的主要目的已经不是为了寻址,主要是用来做权限检查也就是保护模式的跨段权限检查
它包括了16位的可见段选择子描述和80位的不可见部分(根据一些书上说的这80位是记录了权限相关内容不过具体的我也不清楚)
八个段寄存器包括(顺序也很重要):

  1. es
  2. cs
  3. ss
  4. ds
  5. fs
  6. gs
  7. ldtr
  8. tr

jmp far : ea ap(6字节,2字节的段标识和4字节的偏移)
这里的位置就是段选择子所对应的段描述符的基地址 + 后四个字节的偏移
(段选择子的相关内容可以看我之前的段权限校验测试那篇文章,这里可以认为选择子就是一个表的偏移和rpl也就是请求权限级别的组合)
在这里插入图片描述
ret far : cb 这个ret会出栈八个字节其中四个是eip还有四个是字节其中2位是cs还有两位会追加到esp上
在这里插入图片描述

retfarn : ca iw
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/45555.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ctfshow web入门 权限维持篇 web670-web679 详细题解 全

CTFshow 权限维持 web670【】 补充一下PHP中单双引号的区别: 单引号和双引号之间最显着的区别在于我们插入字符串和变量时。单引号不插入字符串和变量。**单引号内的内容会按原样打印出来。**在大多数情况下,单引号内没有任何变量或转义序列的编译。 …

JVM中释放内存的三种方法

判断是否需要垃圾回收可以采用分析。 1标记--清除算法 分为两个阶段,标记和清除,先利用可达性分型标记还存活的对象,之后将没有被标记的对象删除,这样容易生成空间碎片,而且效率不稳定 标记阶段: 标记阶段…

Appium 2安装与使用java对Android进行自动化测试

文章目录 1、Appium 2.1安装1.1、系统要求1.2、安装Appium2.1服务1.3、安装UiAutomator2驱动1.4、安装Android SDK platform tools1.5、下载OpenJDK 2、Android自动代码例子2.1、安装Android自动化测试元素定位工具Appium Inspector2.2、编写android app自动化测试代码和使用ex…

飞机打方块(二)游戏界面制作

一、背景 1.新建bg节点 二、飞机节点功能实现 1.移动 1.新建plane节点 2.新建脚本GameController.ts,并绑定Canvas GameControll.ts const { ccclass, property } cc._decorator;ccclass export default class NewClass extends cc.Component {property(cc.Node)canvas:…

uniapp编写微信小程序和H5遇到的坑总结

uniapp编写微信小程序和H5遇到的坑总结 1、阻止事件冒泡2、二维码生成3、H5跨域配置4、H5时,地址栏上添加版本号5、H5时,tabBar遮挡部分内容6、uniapp使用webview通信6.1、uniapp编写的小程序嵌入h5之间的通信6.1.1、小程序向h5发送消息6.1.2、h5向小程序…

前端大屏常用的适配方案

假设我们正在开发一个可视化拖拽的搭建平台,可以拖拽生成工作台或可视化大屏,或者直接就是开发一个大屏,首先必须要考虑的一个问题就是页面如何适应屏幕,因为我们在搭建或开发时一般都会基于一个固定的宽高,但是实际的…

websocket + stomp + sockjs学习

文章目录 学习链接后台代码引入依赖application.ymlWebSocketConfigPrivateControllerWebSocketService WebSocketEventListenerCorsFilter 前端代码Room.vue 学习链接 WebSocket入门教程示例代码,代码地址已fork至本地gitee,原github代码地址&#xff…

STM32--DMA

文章目录 DMA简介DMA特性 DMA框图DMA基本结构DMA请求数据宽度对齐DMA数据转运工程DMAADC多通道 DMA简介 直接存储器存取(DMA)用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU干预,数据可以通过DMA快速地移动,这就节省了CPU的…

PyTorch学习笔记(十七)——完整的模型验证(测试,demo)套路

完整代码: import torch import torchvision from PIL import Image from torch import nnimage_path "../imgs/dog.png" image Image.open(image_path) print(image)# 因为png格式是四个通道,除了RGB三通道外,还有一个透明度通…

字符设备驱动实例(ADC驱动)

四、ADC驱动 ADC是将模拟信号转换为数字信号的转换器,在 Exynos4412 上有一个ADC,其主要的特性如下。 (1)量程为0~1.8V。 (2)精度有 10bit 和 12bit 可选。 (3)采样时钟最高为5MHz,转换速率最高为1MSPS (4)具有四路模拟输入,同一时…

差值结构的复合底部

( A, B )---3*30*2---( 1, 0 )( 0, 1 ) 让网络的输入只有3个节点,AB训练集各由6张二值化的图片组成,让A 中有3个点,B中有1个点,且不重合,统计迭代次数并排序。 其中有20组数据 让迭代次数与排斥能成反比,排…

第 7 章 排序算法(3)(选择排序)

7.6选择排序 7.6.1基本介绍 选择式排序也属于内部排序法,是从欲排序的数据中,按指定的规则选出某一元素,再依规定交换位置后达到排序的目的。 7.6.2选择排序思想: 选择排序(select sorting)也是一种简单的排序方法…

装饰器读取不到被装饰函数的参数-已解决

def write_case_log(func):def wrapper(*args, **kwargs):logger.info("{}开始执行".format(func.__name__))func(*args,**kwargs)logger.info("{}执行中".format(args))logger.info("{}执行结束",format(func.__name__))return wrapper被装饰函…

每天一道leetcode:剑指 Offer 34. 二叉树中和为某一值的路径(中等图论深度优先遍历递归)

今日份题目: 给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶子节点 是指没有子节点的节点。 示例1 输入:root [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSu…

PyCharm连接Docker中的容器(ubuntu)

一、为什么要用Pycharm链接Docker中的ubuntu 因为在进行深度学习的时候,基于windows系统在开发的过程中,老是出现很多问题,大多数是环境问题。 尽管安装了Conda,也不能很好的解决问题,使用ubuntu是最好的选择。 二、…

docker基础

本地安装 ①卸载旧版 sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine podman runc 保证虚机无安装包冲突 ②在新主机上首次安装 Docker 引擎之前,您需…

运行flutter doctor命令窗口直接闪退

在cmd中输入flutter doctor后闪退了。 使用高速摄像机可以看到报错信息。 报错信息的意思是git的文件夹不能删掉,请保留flutter中git文件。

[机器学习]特征工程:主成分分析

目录 主成分分析 1、简介 2、帮助理解 3、API调用 4、案例 本文介绍主成分分析的概述以及python如何实现算法,关于主成分分析算法数学原理讲解的文章,请看这一篇: 探究主成分分析方法数学原理_逐梦苍穹的博客-CSDN博客https://blog.csdn.…

css 实现电梯导航

实现原理&#xff1a;利用css实现电梯导航很简单&#xff0c;基本原理就是通过a标签绑定跳转目标的id来实现的 html代码&#xff1a; <div class"body"><div class"top" id"top"></div><div class"con1" id"…

线性代数的学习和整理5: 矩阵的加减乘除及其几何意义(未完成,建设ing)

目录 1 矩阵加法 1.1 矩阵加法的定义 1.2 加法的属性 1.2.1 只有同类型&#xff0c;相同n*m的矩阵才可以相加 1.2.1 矩阵加法的可交换律&#xff1a; 1.2.2 矩阵加法的可结合律&#xff1a; 1.3矩阵加法的几何意义 2 矩阵的减法 2.1 矩阵减法定义和原理基本同 矩阵的…