扒開系統呼叫的三層皮(上)

2021-07-29 01:26:55 字數 916 閱讀 5209

系統呼叫的機制是靠軟體中斷實現的,首先,使用者程式為系統呼叫設定引數。其中乙個引數是系統呼叫編號。引數設定完成後,程式執行「系統呼叫」指令。x86系統上的軟中斷由int產生。這個指令會導致乙個異常:產生乙個事件,這個事件會致使處理器切換到核心態並跳轉到乙個新的位址,並開始執行那裡的異常處理程式。此時的異常處理程式實際上就是系統呼叫處理程式,新位址的指令會儲存程式的狀態,計算出應該呼叫哪個系統呼叫,呼叫核心中實現那個系統呼叫的函式,恢復使用者程式狀態,然後將控制權返還給使用者程式,每個系統呼叫被賦予乙個系統呼叫號,系統呼叫號是通過eax暫存器傳遞給核心的。除了系統呼叫號以外,大部分系統呼叫都還需要一些外部的引數輸人。

1、用c語言來建立得到當前的程序號(呼叫api)

直接呼叫getpid函式,即可得到當前程序號。

2、用彙編來呼叫對應的系統呼叫

彙編第一句:把系統呼叫號14賦給eax暫存器,通過系統呼叫號來進行呼叫。

彙編第二句:執行eax暫存器中所對應的系統呼叫。

彙編第三局:將結果通過eax暫存器傳給b。

最後將程序id列印出來。

3、結果

三、總結

首先我們需要在使用者態時將系統呼叫號放入到暫存器eax中,再由指令int 0x80進行系統呼叫,然後進入到核心態,以我的實驗為例,在核心態就會由sys_getpid函式來完成相關的功能,並將返回值返回到暫存器eax中,然後退出核心態系統呼叫,再退出核心態返回到使用者態。

Linux核心分析4 扒開系統呼叫三層皮

實驗 使用庫函式api和c 中嵌入彙編 兩種方式使用同乙個系統呼叫 席金玉 linux核心分析 mooc課程 系統呼叫 系統呼叫只是乙個特殊的中斷。我們通過庫函式和系統呼叫打交道,庫函式把系統呼叫封裝起來。1 儲備知識 核心態和使用者態 核心態 在高執行級別下,可以執行特權指令,訪問任意的物理記憶體...

第四周 扒開系統呼叫的「三層皮」

第四周 扒開系統呼叫的 三層皮 一 本週學習內容總結 1.系統呼叫的 三層皮 2.系統呼叫的意義及api與系統呼叫的關係 1 系統呼叫的意義 2 api和系統呼叫 3.使用者態 核心態 中斷 4.系統呼叫的引數傳遞方法 二 實驗內容總結 以c語言和嵌入式彙編兩種方式編寫通過api進行系統呼叫的例項 ...

三層呼叫關係 梳理MVC與三層架構的關係

mvc與三層架構 系統架構 系統架構是指,整合應用系統程式大的結構。經常提到的系統結構有兩種 這兩種結構既有區別,又有聯絡。但這兩種結構的使用,均是為了降低系統模 塊間的耦合度。三層架構是指 檢視層 view 服務層 service,與持久層 dao。它們分別完成不同的功能。為了更好的降低各層間的耦...