上層應用程式通過呼叫函式進入作業系統,表面上是函式,實際上是什麼呢?
第乙個問題:應用程式在記憶體中,作業系統也在記憶體中,為什麼不能直接進入作業系統中呢?答案是安全。
那麼問題來了,既然不可以直接進入,那怎麼才能阻止直接進入呢?怎樣才能進入核心中呢?
第乙個問題的答案是通過硬體將記憶體分為使用者態和核心態。
dpl:目標記憶體的特權級
cpl:當前特權級。數值越小,級別越高。
執行指令時,只有cpl的特權級高於dpl時,指令才允許執行。
那麼究竟怎樣才能進入核心呢?答案是中斷,進入核心的唯一方法。例如呼叫open函式,被作業系統展開後包含中斷,就可以進入核心。這個中斷就是int 0x80
以printf()為例
應用程式呼叫printf(),在庫函式中變成printf()(為了與write()引數匹配),再呼叫write()(通過巨集展開,包含int 0x80中斷),再通過中斷進入到作業系統內。
那麼int 0x80到底做了什麼呢?
先從那個展個的,包含int 0x80的巨集開始,看看這個巨集做了什麼呢?(這段沒聽明白》_
接下來介紹int 0x80。通過idt表來找到要轉到哪個地方去執行。
int 0x80呼叫哪個函式呢?
這一段的核心思想就是,通過中斷,更改dpl,使得程式能進入作業系統。
sys_call_table是處理函式表,乘以4表示每個函式指標占用四個位元組。
python的模組呼叫 第五講
author michal date 2019 8 24 調取同級目錄中的方法1 import otherutils otherutils.py1 調取同級目錄下的方法2 from otherutils import py1 import sys py1 print sys.path 調取其他包下面...
第五講 資料的處理
06springmvc data a 提交的網域名稱稱和處理方法的引數名一致即可。提交的資料 處理方法 b 如果網域名稱稱和引數名不一致 提交的資料 處理方法 c 提交的是乙個物件 要求提交的表單的網域名稱和物件的屬性名一致,引數使用物件即可 提交的資料 處理方法 實體user類 第一種通過mode...
第五講 Oracle使用者
oracle使用者的概念對於oracle資料庫至關重要,在現實環境當中乙個伺服器一般只會安裝乙個oracle例項,乙個oracle使用者代表著乙個使用者群,他們通過該使用者登入資料庫,進行資料庫物件的建立 查詢等開發。每乙個使用者對應著該使用者下的n多物件,因此,在實際專案開發過程中,不同的專案組使...