频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

谈谈Linux中的存储保护

来源: 作者: 出处:巧巧读书 2006-06-07 进入讨论组

以下讨论的内容是以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,事情就大大?了。

 

查看 http://www.qqread.com/linux/2006/06/w720123061.html 更多文章 更多内容请看Linux集群技术体验Linux的音影世界存储过程专题,或进入讨论组讨论。

收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章