谈谈Linux中的存储保护

以下讨论的内容是以i386平台为基础的

Linux将4G的地址划分为用户空间和内核空间两部分。在Linux内核的低版本中(2。0。X),通常0-3G为用户空间,3G-4G为内核空间。这个分界点是可以可以改动的。

正是这个分界点的存在,限制了Linux可用的最大内存为2G.而且要通过重编内核,调整这个分界点才能达到。

实际上还可以有更好的方法来解决这个问题。由于内核空间与用户空间互不重合,所以可以用段机制提供的保护功能来保护内核级代码。以下为2。0。X的部分代码:

/usr/src/linux/arch/i386/kernel/entry.S

A: .quad 0xc0c39a000000ffff /* 0x10 kernel 1GB code at 0xC0000000 *

B: .quad 0xc0c392000000ffff /* 0x18 kernel 1GB data at 0xC0000000 *

C: .quad 0x00cbfa000000ffff /* 0x23 user 3GB code at 0x00000000 *

D: .quad 0x00cbf2000000ffff /* 0x2b user 3GB data at 0x00000000 *

A,B为内核代码段及数据段的描述符。C,D为用户代码及数据段的描述符从以上,我们可以清楚的看到A,B的特权级为0,而C,D的特权级为3。当内核存取用户空间的内容时,他借助于fs寄存器,同过将FS寄存器的内容置为D来达到访问用户空间的目的。

2。2。X版的 内核对此进行了改动。这样内核空间扩张到了4G,所以可以直接进行拷贝了

.quad 0x00cf9a000000ffff /* 0x10 kernel 4GB code at 0x00000000 *

.quad 0x00cf92000000ffff /* 0x18 kernel 4GB data at 0x00000000 *

.quad 0x00cffa000000ffff /* 0x23 user 4GB code at 0x00000000 *

.quad 0x00cff2000000ffff /* 0x2b user 4GB data at 0x00000000 *

从表面上看内核的基地址变为了0,但实际上,内核通常仍在虚址3G以上。其中奥妙在与 不同的连接描述文件:

2。2。X:

. = 0xC0000000 + 0x100000;

_text = .; /* Text and read-only data */

.text : {

*(.text)

*(.fixup)

*(.gnu.warning)

} = 0x9090

.text.lock : { *(.text.lock) } /* out-of-line lock text */

.rodata : { *(.rodata) }

.kstrtab : { *(.kstrtab) }

。。。。

2。0。X:

faint,2。0内核被删除了。 :(

不管怎莫说,请大家相信我,2。0。X的起址为0x100000。这样一来,二者就相等了。都是0xC0000000 + 0x100000

用户空间在2。2。X中从直观上变为0-4G,让人迷惑:其不是可以直接访问内核了?其实不然, 同过使用页机制提供的保护,阻止了用户程序访问内核空间。

这样,存取用户空间实际上已不需要FS,GS的支持。但在内核中仍保留set_fs(X)等宏上你设的值用来验证随后的操作是否合适。是否超过设定的X。此处X不再是一个段描述符,而是一个具体的值。

此处就有一个陷阱:如果你将Set_fs的值设置为Kernel_DS,而没有将其该回去,当用户通过系统调用将一个Buffer的地址(应该在用户空间)设置为一个内核空间,而内核在访问该地址前认为默认当前的阀值仍为User_DS,事情就大大?了。

Linux存储保护,谈谈Linux中的存储保护相关推荐

  1. linux rstudio 中文乱码,谈谈R中的乱码(一)

    原标题:谈谈R中的乱码(一) baidao:个人博客: 数据匠:http://www.baidao.net/ 在R教学中,首先要跨过去的一座大山就是乱码问题.很多学生在装好R和RStudio之后,刚刚 ...

  2. 谈谈Linux中Redis的薪火相传与反客为主及如何实现

    测试文件资源:主从复制.薪火相传.反客为主博客测试资料-Linux文档类资源-CSDN下载主从复制.薪火相传.反客为主博客测试资料更多下载资源.学习资料请访问CSDN下载频道.https://down ...

  3. linux 查看日志_干货 | 名企高频考点之谈谈Linux日志查看方式都有哪些

    点击蓝字关注我哦 以下是本期干货视频视频后还附有文字版本哦 ▼<名企高频考点-谈谈Linux日志查看方式都有哪些>▼ ps:请在WiFi环境下打开,如果有钱任性请随意 0.概述 在我们面试 ...

  4. linux文件扫描并打印,Linux办公一条龙—Linux中扫描、打印的实现

    扫描图片是日常办公中进行的比较频繁的工作,如何在Linux中使用扫描仪就成为了一个问题.下面笔者就详细介绍一下在Linux中如何进行扫描. 常见的RedHat Linux9(以下简称RH9)中内置了小 ...

  5. 谈谈Linux系统CP命令如何做到0.2秒复制100G大文件?

    谈谈Linux系统CP命令如何做到0.2秒复制100G大文件? 文章目录 谈谈Linux系统CP命令如何做到0.2秒复制100G大文件? cp 引发的思考 文件系统 为什么 cp 那么快? 结语 cp ...

  6. php文件内含有隐藏的^m字符,【整理】如何取消Linux下,vi中显示的^M符号

    [整理]如何取消Linux下,vi中显示的^M符号 [背景知识] ^M 是ascii中的'\r', 回车符,是16进制的0x0D,8进制的015,十进制的13. 对于换行这个动作,unix下一般只有一 ...

  7. linux平台下QtCreator中集成Valgrind系列工具

    linux平台下QtCreator中集成Valgrind系列工具 ###1.valgrind 安装 valgrind 安装 2.打开QtCreator >> Analyze 你就会发现 这 ...

  8. Apache源码包在LINUX(CENTOS6.8)中的安装(出现问题及解决)

    任务:在CENT6.8系统中安装Apache(版本为:httpd-2.4.41) 前提:由于源码包必须先编译后安装,所以必须先安装编译器:gcc 理论步骤: 1.检测gcc软件包,如果不存在则进行安装 ...

  9. Linux环境编程--linux中的perror、exit、_exit、wait 和 waitpid

    perror: #include<stdio.h>        #include<stdlib.h> 定义函数 void perror(const char *s);  pe ...

最新文章

  1. T-SQL基础(三)之子查询与表表达式
  2. Android开发学习之路--Camera之初体验
  3. spring处理循环依赖时序图_Maven依赖管理系统
  4. atom常用的插件整理
  5. 怎么打开linux的超级终端,电脑超级终端在哪里|电脑打开超级终端的方法
  6. 靶场练习之hackinglab(鹰眼)-基础题
  7. c 17 语言标准下载,C++ 17 标准手册(含C++ 17 STL Cookbook) 官方pdf原版
  8. 高等数学张宇18讲 第十七讲 三重积分、第一型曲线曲面积分
  9. 潮流短视频必备——PR赛博朋克效果视频转场快速过渡模板
  10. 涉密计算机终端安全防护,终端安全登录与文件保护系统保密认证设备
  11. Ruby学习-Ruby语言的一些特点
  12. 【SpringBoot】Bean 注入失败问题汇总
  13. 使用postman测试上传图片接口
  14. 街景地图工作是如何工作的
  15. 《APP逆向学习》课程介绍和什么是安卓app逆向?
  16. ArrayList.toArray(T[] a) 的说明
  17. 使用Python调用有道翻译接口实现翻译任务
  18. unity wsad 鼠标_Unity键盘WASD实现物体移动
  19. 【Proteus仿真】用24C04与1602LCD设计的简易加密电子密码锁
  20. 如果你不了解未来年轻人的生活方式,谈什么立业!

热门文章

  1. AUTOSAR从入门到精通100讲(三十五)-Lin通信协议栈分析三部曲LinTrcv配置及代码分析
  2. 产品认知:真正厉害的产品经理,都是“数据思维”的高手
  3. java netty html_源码时代JAVA干货分享|带你用Netty框架实现WebSocket通信
  4. jquery手写轮播图_15个超强的jQuery/HTML5图片轮播插件
  5. 【ECharts系列|02可视化大屏】 舆情分析,人口分析及警情警力活动情况的实现【上篇】
  6. mysql数据库突然连不上了_mysql数据库突然连接不上去
  7. java 设置系统参数_Java如何设置系统参数和运行参数
  8. mysql联合查询语句详解_实例讲解MySQL联合查询
  9. HTML5中Web Worker技术的使用实例
  10. “前”方有坑,绕道而行(一)-- H5 CSS