從使用者態切換到核心態

2021-09-25 21:46:01 字數 481 閱讀 3201

在linux系統中,每個系統呼叫被賦予乙個系統呼叫號。這樣通過這個系統呼叫號就可以關聯系統呼叫。當使用者空間執行的程序執行乙個系統呼叫的時候,這個系統呼叫號就告訴核心需要呼叫哪個。

核心記錄了系統調表中所有已註冊過的系統呼叫的列表,這個表為每乙個有效的系統呼叫指定了唯一的系統呼叫號。

使用者空間程式無法完成的**。它們不能直接呼叫核心的中的函式,因為核心駐留在受保護的位址空間上。所以應運程式必先通知系統,告訴自己需要乙個系統呼叫,希望系統切換到核心態,這樣核心就可以代表應用程式在核心空間執行系統呼叫。

linux系統是依靠軟中斷來實現使用者態到核心態的切換,具體過程可以分為一下步驟:

引數傳遞:系統呼叫號是通過eax暫存器傳遞給核心的,而對應的系統呼叫可能需要一些引數,ebx、ecx、edx、esi、edi這五個暫存器是用來傳遞系統呼叫引數的,如果出現引數大於五個的話,那就需要建立乙個堆疊,用乙個單獨的暫存器來儲存這個堆疊的位址,從而將引數傳遞到核心態

使用者態切換到核心態 補充

剛剛看了別的博文,才知道不是只有系統呼叫才切換到核心態,還有別的操作可以切換到核心 這是使用者態程序主動要求切換到核心的一種方式,使用者態程序通過系統呼叫申請使用作業系統提供的的服務完成工程的過程,比如fork 實際上就是執行了乙個建立新程序的系統呼叫。而系統呼叫的機制其核心還是使用了作業系統為使用...

init程序如何從核心態切換到使用者態

大家都知道如何產生乙個新的程序。通過sys fork,之後再呼叫 sys execve 系統初啟後 核心態 的第乙個使用者態程序是init。這要涉及到內層 特權級高 向外層 特權級低 轉移的問題。通常情況下,核心是不會呼叫使用者層的 要想實現這逆向的轉移,一般做法是在使用者程序的核心棧 tss es...

使用者態切換到核心態(May 22)

一般來講,從使用者態切換到核心態主要通過以下方式 1.系統呼叫 windows int 0x2e,linux int 0x80 2.中斷 3.異常 4.裡直接int 0x3 除錯斷點 5.彙編指令 sysenter sy it 1.系統呼叫 windows ntstatus stdcall ntre...