x86 分段机制

news2024/11/24 12:51:04
本篇只是做个记录,把重要的东西记录一下.
不保证正确

x86中的物理地址计算过程

  • 8086 时代的分段机制
这要从8086实模式说起
8086实模式 是基于 分段机制的.
    该模式下有段寄存器
    该模式下存在 逻辑地址[a:b](线性地址) 物理地址 // a 存储在段寄存器中,[a:b] 存储了 逻辑地址
    段寄存器中的值和 指令中的地址 算出来 线性地址  // (a << 4) + b
  • 80386 时代的分段机制
80286 新增了 保护模式.这里我们不说 80286 , 直接从 80386 说起, 这里也不说 16位保护模式
80386 新增了 32位保护模式 // 假设此时位于32位保护模式,且关闭分页机制
	该模式下 有同样的段寄存器,只是位宽不一样
    该模式下存在 逻辑地址[a:b](线性地址)物理地址
   	段寄存器中的值 和 描述符表中的描述符 和 指令中的地址 共同算出来 线性地址(即物理地址)
  • 80386 时代的分页机制
80386 新增了 分页机制 // 假设此时位于32位保护模式,并打开分页机制后
    此时 存在 逻辑地址[a:b] 和 线性地址(虚拟地址) 和 物理地址 // 此时可以看到 分段机制输出的地址永远叫做线性地址
    段寄存器中的值 和 描述符表中的描述符 和 指令中的地址 共同算出来 线性地址(即虚拟地址)
    然后 线性地址(即虚拟地址) 经过 "分页机制带来的MMU" 转换 为物理地址 

	注意 : 
		1.分页机制肯定要建立于 分段机制之上 
			// 因为 分段机制 关不掉,且有权限管理功能
		2.分页机制开了之后,会影响到分段机制 
			// 因为 分页基址开了之后,cpu看到的地址概念变化了,
			// 从物理地址转换为了虚拟地址. 
			// 而 段描述符 位于"地址"之上.
			// 分页也有权限功能,会影响"地址"的权限
		3.分页又分段是不必要的.
			在OS中一般使用平坦内存模型. 
			// 放弃分段,使用分页.
			// 即 只分一个段,段的长度为4GB.且将权限放置最低.
  • x86_64 时代的分段机制 TODO
x86_64 只是增加了位宽,并弱化段模式管理,保留权限概念 // 假设此时 位于 64位保护模式,并打开分页机制后.
    但是 还是 存在 逻辑地址[a:b] 和 线性地址(虚拟地址) 和 物理地址
    物理地址计算过程和 "80386 时代的分页机制" 是一样的

x86_64 弱化段模式管理,保留权限概念, TODO

注意:64位保护模式下,必须遵从平坦内存模型.

80386 32位保护模式 分段机制

由于 兼容性 的问题,目前 dos 仍然能在 最新的 x86_64 上跑
8086 引入的分段机制 被保留了下来 , 虽然分段机制在变化,但是还是保留了下来,且分段机制不能关闭.

arm/riscv/ 根本没有 分段机制的影子,而是只有分页机制. // x86 也有分页机制

x86分段机制里面充斥着一些比较复杂的概念.
    段寄存器
    各种段描述符 // 1个描述符 8个字节
    各种门描述符(包括中断门)
    各种描述符表和 表基寄存器
    描述符中的 选择子
x86 的 权限管理(特权级ring0-3) 也和分段基址有扯不开的关系. // 但是 x86_64 弱化段模式管理,保留权限概念, TODO
现在 x86/x86_64 linux 完成系统调用的时候,仍然要通过中断门.
    一个syscall过后,过程中包含了 复杂过程(受硬件 和 软件设置的 表基址寄存器IDTR 和 中断门描述符和它索引的段描述符 影响),然后才进入内核的异常向量表
而 riscv-linux 完成系统调用的时候,非常简单
    一个ecall过后,过程中包含了 简单过程(受硬件 和 软件设置的 mtatus mie mtvec 寄存器影响),然后就进入内核的异常向量表

描述符与描述符表

在这里插入图片描述

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

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

相关文章

记一次由于整型参数错误导致的任意文件上传

当时误打误撞发现的&#xff0c;觉得挺奇葩的&#xff0c;记录下 一个正常的图片上传的点&#xff0c;文件类型白名单 但是比较巧的是当时刚对上面的id进行过注入测试&#xff0c;有一些遗留的测试 payload 没删&#xff0c;然后在测试上传的时候就发现.php的后缀可以上传了&a…

PostMan 测试项目是否支持跨域

使用PostMan可以方便快速的进行跨域测试。 只需要在请求头中手动添加一个Origin的标头&#xff0c;声明需要跨域跨到的域&#xff08;IP&#xff1a;端口&#xff09;就行&#xff0c;其余参数PostMan会自动生成。添加此标头后&#xff0c;请求会被做为一条跨域的请求来进行处…

Python编程基础-文件的打开和读取

文件的访问 使用 open() 函数 打开文件 &#xff0c;返回一个 file 对象 使用 file 对象的读 / 写方法对文件进行读 / 写的 操作 使用 file 对象的 close() 方法关闭文件 打开文件 open()方法&#xff0c;需要一个字符串路径&#xff0c;并返回一个文件对象&#xff0c;默认是”…

学习maven工具

文章目录 &#x1f412;个人主页&#x1f3c5;JavaEE系列专栏&#x1f4d6;前言&#xff1a;&#x1f3e8;maven工具产生的背景&#x1f993;maven简介&#x1fa80;pom.xml文件(project object Model 项目对象模型) &#x1fa82;maven工具安装步骤两个前提&#xff1a;下载 m…

Android基础——英文复习资料

一.填空题 1.An Android project must be bulit before it is run&#xff0c;compiling the java source code(.java flises)into Java bytetcode(.class files)and the into .dex files 2.In Android an activity stores the code for a screen of an app&#xff0c; …

.NET6.0 System.Drawing.Common 通用解决办法

最近有不少小伙伴在升级 .NET 6 时遇到了 System.Drawing.Common 的问题&#xff0c;同时很多库的依赖还都是 System.Drawing.Common &#xff0c;而 .NET 6 默认情况下只在 Windows 上支持使用&#xff0c;Linux 上默认不支持这就导致在 Linux 环境上使用会有问题&#xff0c;…

# 电脑好用的工具推荐

电脑好用的工具推荐 文章目录 电脑好用的工具推荐必装工具浏览器火绒安全卸载工具Geek迅雷 记笔记工具Typora印象笔记 开发工具IntelliJ IDEAVisual Studio CodeDbeaverAnother Redis Desktop Manager 备份工具百度网盘阿里云盘一刻相册蓝奏云 必装工具 浏览器 就别装那些乱七…

vue2.x项目从0到1(七)之用户权限

此章节偏理论知识 对于小一点的项目 比如说角色都是平级的 那我们直接像之前 vue2.x项目从0到1&#xff08;二&#xff09;之后台管理侧边栏&#xff08;动态渲染路由以及高亮&#xff09;_vue动态渲染侧边栏_关忆北_的博客-CSDN博客这样渲染就行了 但是一旦项目大了 …

Reids 的整合 Spring Data Redis使用

大家好 , 我是苏麟 , 今天带来强大的Redis . REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统&#xff0c;是跨平台的非关系型数据库。 Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选…

如何使用CSS实现一个拖拽排序效果?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 实现拖拽排序效果的CSS和JavaScript示例⭐ HTML 结构⭐ CSS 样式 (styles.css)⭐ JavaScript 代码 (script.js)⭐ 实现说明⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦…

【HCIP】02.MSTP

运行RSTP/STP&#xff0c;局域网内所有的VLAN共享一棵生成树&#xff0c;被阻塞后的链路将不承载任何流量&#xff0c;无法在VLAN间实现数据流量的负载均衡&#xff0c;导致链路带宽利用率、设备资源利用率较低。802.1S,MSTP兼容STP和RSTP&#xff0c;通过建立多棵无环路的树&a…

论文及代码详解——HRNet

文章目录 论文详解 &#xff08;High-Resolution Networks&#xff09;Parallel Multi-Resolution ConvolutionsRepeated Multi-Resolution FusionsRepresentation Head 代码详解 论文&#xff1a;《Deep High-Resolution Representation Learning for Visual Recognition》 代…

MySQL报错:Incorrect integer value: ‘None‘ for column ‘managerId‘ at row 1

错误如下&#xff1a; 今天在建表的时候突然报错 上网查询了原因&#xff0c;把None改成NULL就行了。 5以上的版本如果是空值应该要写NULL&#xff0c;这种问题一般mysql 5.x上出现。 改完后就运行正常了

07 mysql5.6.x docker 启动, 无 config 目录导致客户端连接认证需要 10s

前言 呵呵 最近再一次 环境部署的过程中碰到了这样的一个问题 我基于 docker 启动了一个 mysql 服务, 然后 挂载出了 数据目录 和 配置目录, 没有手动复制配置目录出来, 所以配置目录是空的 然后 我基于 docker 启动了一个 nacos, 配置数据库设置为上面的这个 mysql 然后 启…

【2023年11月第四版教材】《第6章-项目管理概论》(第二部分)

《第6章-项目管理概论》&#xff08;第二部分&#xff09; 3 项目经理的角色3.1 项目经理的影响力范围3.2 项目经理领导力风格 4 价值驱动的项目管理知识体系4.1 开发生命周期类型 5 五大过程组6 五个过程组和十大知识领域 3 项目经理的角色 3.1 项目经理的影响力范围 范围影…

从业务层的代码出发,去排查通用框架代码崩溃的问题

目录 1、问题说明 1.1、Release下崩溃&#xff0c;Debug下很难复现 1.2、用Windbg打开dump文件&#xff0c;发现崩溃在通用的框架代码中 2、进一步分析 2.1、使用IDA查看汇编代码尝试寻找崩溃的线索 2.2、在Windbg中查看相关变量的值 2.3、查看最近代码的修改记录&#…

渗透和红队快速打点工具

&#x1f525; POC-bomber &#x1f984; POC bomber 是一款漏洞检测/利用工具&#xff0c;旨在利用大量高危害漏洞的POC/EXP快速获取目标服务器权限 本项目收集互联网各种危害性大的 RCE 任意文件上传 反序列化 sql注入 等高危害且能够获取到服务器核心权限的漏洞POC/EXP…

【C++STL基础入门】深入浅出string类的比较(compare)、复制(copy)

文章目录 前言一、比较1.比较运算符2.compare函数 二、复制1.copy函数 总结 前言 本系列STL使用VS2022C20版本 在C标准库中&#xff0c;string类是一个功能强大的字符串处理类&#xff0c;提供了丰富的操作函数。本文将详细介绍string类的比较、复制、查找字串、返回字串、交…

d3dx9_43.dll如何修复?找不到d3dx9_43.dll怎么办

d3dx9_43.dll文件通常与DirectX 9运行时库一起安装在用户的计算机上。当用户运行需要DirectX 9支持的应用程序时&#xff0c;操作系统会自动加载d3dx9_43.dll文件&#xff0c;并提供所需的功能。如果缺少或损坏了该文件&#xff0c;用户可能会遇到无法运行应用程序、崩溃或显示…

如何使用CSS实现一个全屏滚动效果(Fullpage Scroll)?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 实现全屏滚动效果的CSS和JavaScript示例⭐ HTML 结构⭐ CSS 样式 (styles.css)⭐ JavaScript 代码 (script.js)⭐ 实现说明⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦…