Linux存儲保護,談談Linux中的存儲保護

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/370897.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/370897.shtml
英文地址,請注明出處:http://en.pswp.cn/news/370897.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

004-JQuery屬性

添加與刪除屬性CSS類HTML代碼/文本/值添加與刪除屬性 attr(name|properties|key,value|fn) :設置或返回被選元素的屬性值 removeAttr(name) :從每一個匹配的元素中刪除name屬性 prop(name|properties|key,value|fn) :獲取在匹配的元素集中的第…

預熱您的JVM –超快速生產服務器和IDE

幾個月前,我正在閱讀Java中的復雜事件處理以及實現低延遲的方法。 在我長達一個小時的研究結束時,我發現即使您的應用程序編寫正確并且您的方法主要在0(log n)的時間內運行,并且您正在使用某些前沿的硬件解決方案&…

微信小程序APP(商超營銷類)經驗總結

項目介紹 這是一款主打門店營銷的小程序。包括首頁、門店、營銷、個人設置、登錄、數據統計展示、營銷設置等。 本來要獨立完成整個項目,包括前后端一套的,有些意外因素,項目臨時收尾(說明:只完成了前端的部分&#…

excel不顯示0_Excel數字過長不能完整顯示?超長數字變為0

Excel中計算規則和限制設定數值精確度為15位!超過15位后,數字會顯示為0excel數字超過15位,會顯示為0,超過10位,默認采用科學計數法顯示1、如何解決超長數字輸入,全部顯示問題?(單元格…

Android天氣預報設計

——嵌入式軟件開發 名字功能模塊代碼行數備注謝燦輝Widget200桌面小程序李楊敏GPS定位,百度地圖API100-150獲取當前所在城市丁小芳城市選擇Activity,天氣API獲取天氣100-200包括數據庫交互本軟件是一個天氣類應用軟件,帶有widget&#xff0c…

linux vi后不保存退出,linux下退出VI的方法:不保存退出

當編輯完文件,準備退出Vi返回到shell時,可以使用以下幾種方法之一。在命令模式中,連按兩次大寫字母Z,若當前編輯的文件曾被修改過,則Vi保存該文件后退出,返回到shell;若當前編輯的文件沒被修改過…

算法筆記_164:算法提高 最小方差生成樹(Java)

目錄 1 問題描述 2 解決方案 1 問題描述 問題描述給定帶權無向圖,求出一顆方差最小的生成樹。輸入格式輸入多組測試數據。第一行為N,M,依次是點數和邊數。接下來M行,每行三個整數U,V,W,代表連接U,V的邊,和權值W。保證圖…

番石榴分配器vs StringUtils

因此,我最近寫了一篇有關舊的,可靠的Apache Commons StringUtils的文章 ,該文章引起了一些評論,其中之一是Google Guava提供了更好的連接和拆分字符串的機制。 我必須承認,這是我尚未探索的番石榴的一個角落。 因此&am…

layui數據表格(一:基礎篇,數據展示、分頁組件、表格內嵌表單和圖片)

表格展示神器之一:layui表格 前言:在寫后臺管理系統中使用最多的就是表格數據展示了,使用表格組件能提高大量的開發效率,目前主流的數據表格組件有bootstrap table、layui table、easyUI table等.... 博主個人比較傾向于layui&am…

算法設計與分析_算法設計與分析(第2版)第2章分治策略回顧

YI時間|外刊|MM-DFW|機器學習系列點擊上方藍字,關注給你寫干貨的松子茶分治策略是通用算法設計技術之一,很多有效的算法是它的特殊實現,顧名思義就是分而治之。一個問題能夠用分治法求解的要素是問題能夠按照某種方式分…

2017-2018-1 Java演繹法 第三周 作業

團隊任務:團隊展示與選題團隊展示 隊員學號及姓名 學號  姓名  主要負責工作  20162315  馬軍  日常統計,項目部分代碼  20162316  劉誠昊  項目部分代碼,代碼質量測試  20162317  袁逸灝  組長 項目 主要 代碼  201…

linux開機啟動roscore,樹莓派ubuntuMate系統中開機自啟動ROS的launch文件

0x00 為何需要開機自啟動launch文件在ROS開發后期階段由于功能已經趨于穩定,因此就需要系統在一上電啟動后就自動把ROS下的各節點程序加載運行,這樣就省去了我們還得手動輸入roslaunch命令來加載bringup的launch文件的操作。經過我的實際測試目前有兩種方…

Oracle ADF移動世界! 你好!

您好,ADF Mobile,世界! 您可能已經知道... ADF Mobile在這里! 以下是一些鏈接,這些鏈接會讓您有賓至如歸的感覺。 ADF Mobile主頁: http://www.oracle.com/technetwork/developer-tools/adf/overview/ad…

Bootstrap里的文件分別代表什么意思及其引用方法

關于Bootstrap打包的文件分別代表什么意思&#xff0c;官網也沒有給出一個明確的解釋&#xff0c;在網上查了一些資料&#xff0c;總價歸納了如下&#xff1a; bootstrap/ <!--主目錄--> ├── css/ <!--CSS樣式文件--> │ ├── bootstrap.css <!…

css 小知識點:inline/inline-block/line-height

inline: 此元素會被顯示為內聯元素&#xff0c;元素前后沒有換行符。因此&#xff1a;無法設置寬度和高度&#xff5e; inline-block: 行內塊元素。元素前后沒有換行符&#xff08;CSS2.1 新增的值&#xff09; 用通俗的話講&#xff0c;就是不獨占一行的塊級元素。然后擁有…

Linux外域遞送郵件,求助:外域郵件發送不了 (頁 1) - iRedMail 技術支持 - iRedMail 開源郵件服務解決方案...

必填信息。沒有填寫將不予回復 - iRedMail 版本號&#xff1a; v0.9.5-1- 使用哪個數據庫存儲用戶帳號(OpenLDAP&#xff0c;MySQL&#xff0c;PostgreSQL)&#xff1a; v0.6.1 (MySQL)- 使用的 Linux/BSD 發行版名稱及版本號&#xff1a;CentOS 6.5- 與您的問題相關的日志…

協同過濾算法_機器學習 | 簡介推薦場景中的協同過濾算法,以及SVD的使用

本文始發于個人公眾號&#xff1a;TechFlow&#xff0c;原創不易&#xff0c;求個關注今天是機器學習專題的第29篇文章&#xff0c;我們來聊聊SVD在上古時期的推薦場景當中的應用。推薦的背后邏輯有沒有思考過一個問題&#xff0c;當我們在淘寶或者是某東這類電商網站購物的時候…

JavaOne 2012:觀察與印象

當我坐在舊金山國際機場等待登上飛機返回家中時&#xff0c;我一次又一次令人滿意但累人的JavaOne&#xff08;2012&#xff09;體驗&#xff0c;我正在開始寫這篇特別的博客文章。 自上周日的主題演講以來&#xff0c;在會議上瘋狂地撰寫了約30篇博客文章之后&#xff0c;很難…

less學習三---父選擇器

引用父選擇器需要用到“&”符號 &#xff06;運算符表示嵌套規則的父選擇器&#xff0c;并且在修改類或偽類選擇器的應用中非常普遍 ul{li{&:nth-child(2) a {color: red;&:hover {color: yellow;}}} }//編譯為 ul li:nth-child(2) a {color: red; } ul li:nth-ch…

SaltStack匹配target-第六篇

練習內容 Salt遠程執行中目標選擇常用的模式 1.通配符匹配 2.正則表達式匹配 3.List支持 4.Grains匹配 5.IP地址匹配 6.混合匹配 7.Node groups 遠程執行格式 target就是我們要選擇的minion salt <target> <function> [arguments] 一&#xff0c;通配符匹配&#x…