4.6 offset指令,jmp short指令,far,dword ptr各种跳转指令

4.6 offset指令,jmp short指令,far,dword ptr各种跳转指令

可以修改IP,或同时修改CS和IP的指令统称为转移指令。概括的讲,转移指令就是可以控制CPU执行内存中某处代码的指令

1. 转移指令

1.1 8086CPU的转移行为有以下几类

  • 只修改IP时,称为段内转移,比如:jmp ax
  • 同时修改CS和IP时,称为段间转移,比如:jmp 1000:0

1.2 段内转移又分为:短转移和近转移

  • 短转移IP的修改范围为-128-~127
  • 近转移IP的修改范围为-32768~32767

1.3 8086CPU的转移指令分为以下几类

  • 无条件转移指令(如:jmp)
  • 条件转移指令
  • 循环指令(如:loop)
  • 过程
  • 中断

2. jmp short指令

  • jmp short 标号(转到标号处执行指令),这种格式的jmp指令实现的是段内短转移
  • 它对IP的修改范围为-128~127个字节
  • 转移指令结束后,CS:IP应该指向标号处的指令
  • 这里jmp存的不是目标地址,而是位移距离
assume cs:codesg  
codesg segmentstart:mov ax,0jmp short sadd ax,1s:inc axcodesg ends
end start

image.png

image.png

image.png

3. jmp far ptr指令

  • 当超出jmp short 范围时,编译会报错

image.png

  • 此时使用jmp far ptr指令即可
assume cs:codesg  
codesg segmentstart:mov ax,0mov bx,0inc cxjmp far ptr sdb 256 dup(0)s:inc axcodesg ends
end start

image.png

  • 注意:此时jmp记录的不是偏移量,而是整个地址,因为位移太大不好计算,直接记录cs:ip地址

image.png

4. 转换地址在内存中的jmp指令有两种格式

4.1 jmp word ptr 内存单元地址(段内转移)

  • 功能:从内存单元地址处开始存放着一个字,是转移的目的偏移地址;就是把指定内存单元的地址的数据拿过来作为跳转的地址
  • 例如:
assume cs:codesg  
codesg segmentstart:mov ax,0123hmov ds:[0],ax    jmp word ptr ds:[0]    //ds为段地址,[0]处的数据为偏移地址,将ip改为该地址codesg ends
end start

image.png

4.2 jmp dword ptr 内存单元地址(段间转移)

  • 如果要cs:ip同时更改,可以用这个
  • 功能:从内存单元地址处开始存放着两个字,高地址处的字是转移的目的段地址,低地址处是转移的目的偏移地址
  • cs = 内存单元地址 + 2;ip = 内存单元地址
assume cs:codesg  
codesg segmentstart:mov ax,0123hmov ds:[0],ax            //把ax的值赋给该地址的内存数据mov word ptr ds:[2],0    //把该地址处的内存数据改为0000jmp dword ptr ds:[0]     //跳转到cs:ip即0000:0123这个位置codesg ends
end start

image.png

image.png

image.png

  • cs为内存地址+2即ds:[2],0000
  • ip为内存地址即ds:[0],0123

5. jcxz指令

image.png

  • cx为0就跳转

6. 操作符offset指令

操作符offset在汇编语言中是由编译器处理的符号,它的功能是取得标号的偏移地址

assume cs:codesg  
codesg segmentstart:mov ax,offset startmov dx,offset ss:mov bx,cxinc bxcodesg ends
end start

image.png

image.png

  • start 标号是0,所以offset取出start的偏移地址赋给ax
  • s 标号是6,所以offset取出s的偏移地址赋给dx

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

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

相关文章

按照指定的分隔符和次数从右侧开始分割字符串元素numpy.char.rsplit()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 按照指定的分隔符和次数 从右侧开始分割字符串元素 numpy.char.rsplit() [太阳]选择题 请问关于以下代码表述错误的选项是? import numpy as np a np.array([a b c, x,y,z, 1 2,…

HackTheBox-Mist

整体思路 端口扫描->Pluck CMS组件文件读取漏洞->文件上传获取shell->创建指向exe的快捷方式来提权-> 信息收集&端口利用 namp -sSVC 10.10.11.17目标只开放了80端口,将mist.htb加入到hosts文件后,访问mist.htb Pluck CMS文件读取 在…

3.6k star, 免费开源跨平台的数据库管理工具 dbgate

3.6k star, 免费开源跨平台的数据库管理工具 dbgate 分类 开源分享 项目名: dbgate -- 免费开源跨平台的数据库管理工具 Github 开源地址: GitHub - dbgate/dbgate: Database manager for MySQL, PostgreSQL, SQL Server, MongoDB, SQLite and others. Runs under…

Ps:合并到 HDR Pro

Ps菜单:文件/自动/合并到 HDR Pro Automate/Merge to HDR Pro 合并到 HDR Pro Merge to HDR Pro命令可以将同一场景的具有不同曝光度的多个图像合并起来,从而捕获单个 HDR 图像中的全部动态范围。 合并到 HDR Pro 命令分两步进行。 首先,需要…

Day82:服务攻防-开发组件安全Solr搜索Shiro身份Log4j日志本地CVE环境复现

目录 J2EE-组件Solr-本地demo&CVE 命令执行(CVE-2019-17558) 远程命令执行漏洞(CVE-2019-0193) Apache Solr 文件读取&SSRF (CVE-2021-27905) J2EE-组件Shiro-本地demo&CVE CVE_2016_4437 Shiro-550Shiro-721(RCE) CVE-2020-11989(身…

Emacs之解除comment-region绑定C-c C-c快捷键(一百三十四)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

排忧解难:线上问题排查工具箱

一、线上系统问题的重要性及挑战 随着互联网的普及,24小时运行的线上系统已经成为了企业运营中不可或缺的一部分。无论是电商、金融、教育还是其他行业,线上系统都发挥着至关重要的作用。一旦线上系统出现问题,不仅会影响到企业的正常运营&a…

设计模式:桥接模式

定义 桥接模式(Bridge Pattern)是一种结构型设计模式,它将抽象与实现分离,使它们可以独立地变化。在桥接模式中,抽象部分(Abstraction)包含对实现部分(Implementor)的引用,实现部分可以通过接口中的方法被抽象部分使用,但是具体的实现细节对于抽象部分来说是隐藏的…

【资源分享】Eclipse最新版本免费安装下载

::: block-1 “时问桫椤”是一个致力于为本科生到研究生教育阶段提供帮助的不太正式的公众号。我们旨在在大家感到困惑、痛苦或面临困难时伸出援手。通过总结广大研究生的经验,帮助大家尽早适应研究生生活,尽快了解科研的本质。祝一切顺利!—…

成为不可替代的人,优秀到不能被忽视

一、资料描述 本套个人成长资料,大小30.89M,共有21个文件。 二、资料目录 00发刊词 成为不可替代的人.pdf 01累死你的不是工作,是错的职场价值观.pdf 02教你选好行业,远离裁员降薪.pdf 03如何选对公司,让高薪升值…

opencv-python库 cv2图像二值化详解

文章目录 图像二值化原理cv2.threshold()Qtsu二值化cv2.adaptiveThreshold 图像二值化原理 图像二值化原理是通过设定一个阈值,将图像中的像素点的灰度值与阈值进行比较,大于阈值的像素点设置为白色,小于阈值的像素点设置为黑色 1。图像二值…

JavaScript中堆栈内存管理机制及其在深拷贝与浅拷贝场景中的应用与解析

一.堆栈的定义 1.栈是一种特殊的线性表。其特殊性在于限定插入和删除数据元素的操作只能在线性表的一端进行。 结论:后进先出(Last In First Out),简称为LIFO线性表。 栈的应用有:数制转换,语法词法分析&…

【云原生篇】K8S之Job 和 CronJob

在 Kubernetes (K8s) 中,Job 和 CronJob 是两种管理批处理任务的资源对象,它们用于控制短暂的一次性任务(Job)或定时执行的周期性任务(CronJob)。 Job 概念 Job 负责运行一个或多个 Pod,并确…

刷题之Leetcode704题(超级详细)

704. 二分查找 力扣题目链接(opens new window)https://leetcode.cn/problems/binary-search/ 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标&am…

RecyclerView滑动到item顶部或底部

最近在开发的时候,遇到了需要通过代码使得RecyclerView能够滑到指定item顶部位置的需求,在查看源码之后,发现RecyclerView已经提供了实现滑动到指定位置的方法,下面是可实现方法: //平滑滚动 recyclerView.smoothScrollToPosition(position)…

【Flink实战系列】Flink 双流 Join 出现数据倾斜如何解决?

【Flink实战系列】Flink 双流 Join 出现数据倾斜如何解决? 在 Flink 里面常见的数据倾斜有两种 计算场景Join 场景第一种计算场景,比如我们常说的 WordCount 计算,这种问题可以参考这篇文章,Flink发生数据倾斜怎么优化任务?(两段聚合的方式) 第二种 Join 场景,是我们今…

手写SpringBoot(五)之整合AOP

系列文章目录 手写SpringBoot(一)之简易版SpringBoot 手写SpringBoot(二)之动态切换Servlet容器 手写SpringBoot(三)之自动配置 手写SpringBoot(四)之bean动态加载 手写SpringBoot&…

聚合DNS管理系统v1.0全新发布 域名解析管理系统

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 聚合DNS管理系统可以实现在一个网站内管理多个平台的域名解析,目前已支持的域名平台有:阿里云、腾讯云、华为云、西部数码、CloudFlare。本系统支持多用户&…

【Django开发】0到1美多商城项目md教程第5篇:短信验证码,1. 避免频繁发送短信验证码逻辑分析【附代码文档】

美多商城完整教程(附代码资料)主要内容讲述:欢迎来到美多商城!,项目准备。展示用户注册页面,创建用户模块子应用。用户注册业务实现,用户注册前端逻辑。图形验证码,图形验证码接口设…

似包非包 + 卡特兰数

1、似包非包---组合总和Ⅳ 背包:解决的是“有限制条件下”的“组合”问题 不能解决排列问题 377. 组合总和 Ⅳ - 力扣(LeetCode) class Solution {//注意示例一:(1,1,2)和(1,2,1)和(2,1,1)是不同组合,这是排列组合中的排列,不是组合!!!//背包问题://解决的是“有限…