选择显示字体大小

谈谈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,事情就大大?了。   


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons