【OS学习笔记】十七 保护模式五:保护模式下如何进行内存保护 与 别名段的意义与作用

上一篇文章学习了如何进入保护模式,以及如何在保护模式下进行内存访问。点击链接查看上一篇文章:进入保护模式与在保护模式下访问内存

首先说明本片文章有对应的汇编代码,点击链接查看:点击查看

本篇文章接着学习。我们已经知道了在保护模式下的内存访问的步骤:包括创建GDT,安装段描述符,然后访问GDT从中取得描述符的索引传送给段寄存器的段选择器从而形成段选择子,然后根据段选择子找到位于GDT中的描述符进行段的访问。那么第一次找到段描述符后就将其缓存到段寄存器的描述符高速缓存器中,在这之后的访问中,直接从段寄存器的描述符高速缓存器中获取描述符的基地址即可。

上述的步骤是我们之前学过的内容。那么处理器是如何在这个过程中保证对内存的访问是安全的呢?如何确保访问各个段的时候不会超出各个段的范围?如何确定代码段是不可写的?如何确定要访问的地址是否是有效的等这些问题,就是本文的学习目标。

本文大概学习以下几种保护:

  • 修改段寄存器时的保护

  • 地址变换时的保护

    • 代码段执行时的保护
    • 栈操作时的保护
    • 数据访问时的保护

以及使用别名段来实现对代码段的读写控制。

1、修改段寄存器时的保护

随着程序的执行,经常会对段寄存器进行修改。尤其是类似于jmp , call ,ret , iret这样的指令就会隐式的修改段寄存器。

比如 jmp dword 0x0010:flush这条指令就会修改段寄存器(这条指令在下一篇文章中的55行)。

在完成以上指令的时候,处理器会将指令中给出的段选择子传给段寄存器的段选择器。但是在传送之前,寄存器会检查段选择子的正确性,并且需要确定该选择子所对应的描述符也是合法的。

假设我们的描述符就在GDT中(后面还会有LDT)。那么我们的段选择子所对应的描述符应该完全位于GDT中。什么意思呢?看下图:

在这里插入图片描述

我们可以看到,描述符位于GDT中,而且描述符的上边界也要位于GDT 的上边界内。条件就是:索引号X8+7<= 边界 这就是处理器做的检查,如果这个条件不满足,处理器就会产生一个异常中断13,同时段寄存器中的原来的值不变。

以上仅仅是检查的第一步。要是通过了上述检查,并从GDT中获取描述符后,紧接着还要对描述符的类别进行确认。如果描述符是只执行代码,则不允许加载到除CS之外的其他段寄存器中。

具体描述符的属性,前几篇文章已经介绍,可以参考这篇文章中关于描述符的TYPE字段的含义:段描述符

在根据以上检测出来该描述符所描述的段的属性后,再检查是否与我们要使用的段的用途匹配。具体规则如下表:

在这里插入图片描述

最后,除了检查段的类别外,还要检查描述符中的P位。如果P=0,表明虽然描述符已经被定义,但是该段实际上并没有存在于物理内存中。此时,处理器终止处理,引发异常中断11。中断处理程序会把把该描述符所对应的段从硬盘的调入内存,然后置P为。 如果P=1,则处理器将描述符加载到段寄存器的的描述高速缓存器,同时置A位。

一旦上述规则全部通过,处理器就将选择子加载到段寄存器的段选择器。

2、地址变换时的保护

2.1 代码段执行时的保护

在32位模式下,尽管段的信息在描述符表中,但是,一旦相应的描述符被加载到段寄存器的描述符高速缓存器后,则处理器取指令和执行指令时,将不再访问描述符表,而是直接使用段寄存器的描述符高速缓存寄存器,从中取出段的线性基地址,与EIP指针寄存器相加,得到最终的物理地址,从而取得指令。

不过,在正式开始执行指令之前,处理器必须检查这个地址的有效性,以防止执行超出允许范围的指令。

这个检查与段的界限有关。访问的指令不超过段的界限即可(与上面不超过GDT的界限一样)。需要访问的内存地址加上指令的长度-1不超过段的界限。假设现在有如下图的一个代码段,地址范围如下,那么EIP+指令长度-1要在下属代码段的地址范围之内:
在这里插入图片描述

2.2 、栈操作时的保护

同上所述,在访问栈段的时候,也是需要检查指令是否合法。只不过与上述代码段不同的是栈段一般是向下扩展的段,所以在计算范围的时候有一定区别:

在这里插入图片描述

2.3 数据访问时的保护

与上述代码段类似,在数据段访问数据的时候,也是需要检查地址的范围是否合法。我们大概明白这其中的道理即可,不再赘述。

3、使用别名访问代码段

众所周知,代码段是不可写的。那么如果我们想要写代码段,如何实现呢?

我们知道,访问代码段是使用CS寄存器保存段基地址,加上EIP寄存器存的值,就形成最终的物理地址,即可。

如果我们非要想写代码段的内容,可以建立代码段的别名。比如让DS指向CS,那么当我们操作DS寄存器的时候,虽然看上去是在操作数据段,实际上我们是在操作代码段。比如我们下一篇文章就有对CS的别名DS,最后我们操作DS来修改代码段的内容!!!

4、总结

  • 学习处理器是如何对内存进行保护
  • 了解别名的意义与作用

笔记记得不是很全,如果有不懂的可以加我联系方式一起交流。

学习探讨加个人:
qq:1126137994
微信:liu1126137994

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

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

相关文章

前端学习(177):定义列表

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/ html4/strict.dtd"> <html><head><meta http-equiv"content-type" content"text/html; charsetutf-8"><title>定义列表<…

oracle 数据库工作总结思维导图

oracle 数据库工作中使用总1. oracle 数据库 工作中使用总结思维导图2 解析oracle执行计划1. oracle 数据库 工作中使用总结思维导图 2 解析oracle执行计划 执行计划树的基本规则如下&#xff1a; 执行计划将包含一个根&#xff0c;没有父&#xff08;操作&#xff09; 父&…

【软件开发底层知识修炼】十一 链接器-链接脚本

上一篇文章学习了链接器之-main函数不是第一个执行的函数:main函数不是第一个执行的函数 今天继续学习链接器&#xff0c;学习链接是如何动作的&#xff0c;从而引入链接脚本的概念。本文就学习链接脚本的概念。 1、链接脚本的作用 我们都知道可重定位文件经过链接器链接后最…

as3 physaxe 2d 物理引擎

http://drawlogic.com/2008/04/06/physaxe-2d-flash-physics-kit-for-haxe-and-list-of-flash-flex-actionscript-physics-engines-for-as3/转载于:https://www.cnblogs.com/vilyLei/archive/2010/11/30/1892298.html

前端学习(178):表格元素

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/ html4/strict.dtd"> <html><head><meta http-equiv"content-type" content"text/html; charsetutf-8"><title>表格</ti…

java后端分享整理

java规范总结1. Java 常见的代码规范1.1. Java 自带的工具方法1.1.1 比较两个对象是否相等1.1.2 apache commons工具类库1.1.2.1 字符串判空1.1.2.3 重复拼接字符串1.1.2.4 格式化日期1.1.2.4 包装临时对象 &#xff08;不是特别常用&#xff09;1.1.3 common-beanutils 操作对…

【OS学习笔记】十八 保护模式五:保户模式下如何进行内存保护 与 别名段的意义与作用 对应汇编代码

本片文章是上一篇文章&#xff1a;点击查看对应的汇编代码。可以学习上一篇文章后再来对照查看汇编代码。或者查阅书籍《X86汇编语言-从实模式到保护模式》点击下载第12章内容来学习。 ;代码清单12-1;文件名&#xff1a;c12_mbr.asm;文件说明&#xff1a;硬盘主引导扇区代码 ;设…

SharePoint要在master page中动态显示List数据的几种方式

我们都知道&#xff0c;在SharePoint中&#xff0c;Content page继承自Page layout&#xff0c;而Page layout又继承自Master page。Master page的作用大家都知道&#xff0c;它定义了站点的的整体外观和公共元素&#xff0c;因此有了很强的页面重用性和很好的页面编辑体验&…

前端学习(179):表单元素

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/ html4/strict.dtd"> <html><head><meta http-equiv"content-type" content"text/html; charsetutf-8"><title>表单</ti…

【软件开发底层知识修炼】十二 C/C++语言中内嵌汇编语言(asm)

上一篇文章学习了链接脚本的语法与相关概念&#xff1a;链接脚本的概念 在继续学习链接器的内容的同时&#xff0c;先学习一个新内容&#xff1a;内嵌汇编。 GCC编译器一般支持C/C内嵌汇编语言&#xff0c;这样可以实现语言本身无法实现的内容。我们本文主要介绍C语言中的内嵌…

并发编程总结

并发编程总结 1. ThreadLocal 每个线程复制一份2.volatile 解决内存可见性问题1. ThreadLocal 每个线程复制一份 package work.thread;/*** * @date 18/6/2019 11:59* @description:*/public class ThreadLocalDemo2 {// 每个线程的第几次操作private static ThreadLocal

【OS学习笔记】十九 保护模式六:保户模式下操作系统内核如何加载用户程序并运行

上一篇文章学习了保户模式下如何进行内存保护 与 别名段的意义与作用&#xff1a;点击链接查看上一篇文章&#xff1a;点击链接 本文接着学习&#xff0c;在保护模式下&#xff0c;内核是如何加载用户程序并运行的。其实这与在实模式下很像&#xff0c;只不过现在保护迷失多了…

数据思维整理

数据思维整理分享

常用的LaTeX公式用法

常用的LaTeX公式用法常用的latex公式用法常用的latex公式用法 加法 效果 减法 - 效果 − 乘法&#xff08;叉乘&#xff09; \times 例子: aba \times bab 效果 ab 乘法&#xff08;点乘&#xff09; \cdot 例子: a⋅ba \cdot ba⋅b 效果 a⋅b 除法 \div 例子&#xff1a;$ a…

linux平台下通过mcr方式从c++程序中调用matlab函数

小细节很多,所以容易出错. 平台:linux gcc matlab2010a 1 在matlab中写好函数例如branch,调用命令 mcc -W cpplib:libbranch -T link:lib branch.m -C 注意末尾的-C,很关键用于生成ctf文件,里面有执行需要的一些配置文件 2 将libbranch.so libbranch.ctf放在同一个目录中,写c程…

【OS学习笔记】二十 保护模式六:保户模式下操作系统内核如何加载用户程序并运行 对应的汇编代码之主引导扇区程序

本汇编代码对应保户模式下操作系统内核如何加载用户程序并运行 的实际主引导扇区代码&#xff1a; 对应的内核代码在&#xff1a;内核代码对应的用户程序代码在&#xff1a;用户程序代码 ;代码清单13-1;文件名&#xff1a;c13_mbr.asm;文件说明&#xff1a;硬盘主引导扇区代码…

java实现sql语句中 准确替换某个字符串

sql语句中准确 替换某个字符串 1.java 代码实现1.java 代码实现 public static void main(String[] args) {String sqls = "select pk_marbasclass from marbasclass where 11=11 and (enablestate = 2) and ((pk_org = 0001A210000000000EO5)) and code in(123) and…

geoserver native JAI error 问题解决方法

学习geotools&#xff0c;就会用到JAI. 最好不要把jar包放到jre环境下&#xff0c;而是在使用的时候&#xff0c;引入。因为在geoserver的web-lib目录下&#xff0c;存在JAI的jar.如果版本冲突&#xff0c;还会导致geoserver无法启动。版本正确也会报错&#xff1a;could not l…

【OS学习笔记】二十一 保护模式六:保户模式下操作系统内核如何加载用户程序并运行 对应的汇编代码之内核代码

本汇编代码对应文章保户模式下操作系统内核如何加载用户程序并运行 中的实际内核代码 对应的主引导扇区代码&#xff1a;主引导扇区代码对应的用户程序代码&#xff1a;用户程序代码 ;代码清单13-2;文件名&#xff1a;c13_core.asm;文件说明&#xff1a;保护模式微型核心程序 …

windows7下iis网站的.net框架版本设置

昨天下载了 VS2010 创建了一个默认的WebApplication&#xff0c;想看看在iis中运行的情况&#xff0c;虽说用了几个月的 win7 &#xff0c;但还从没有用过IIS。首先给人的感觉是IIS变化很大&#xff0c;多出了很多东西&#xff0c;让人感到很茫然。 先建个网站试试&#xff0c;…