讀書筆記 跨特權級呼叫

2021-08-26 10:45:49 字數 971 閱讀 8181

通常發起呼叫的函式和被呼叫的函式都是位於同乙個特權級的**中的,這種呼叫叫做同特權級呼叫,另一種情況是位於不同特權級**段中的**互相呼叫,被稱為跨特權級呼叫。跨特權級呼叫通常是通過乙個所謂的呼叫門(call gate)來完成的。呼叫門的全稱是呼叫門描述符( call-gate descriptor),其結構與中斷描述符非常類似,呼叫門描述符可以出現在gdt和ldt表中,不可以出現在idt表中。

在呼叫門描述符結構中包含segmentselector (段選擇子)用來指定被呼叫**所在的段,offset in segment 用來指定被呼叫**的偏移位址。dpl代表了這個段描述符的特權級別,下面以低特權級的**呼叫高特權級的**為例介紹cpu執行跨特權級的呼叫過程。

1. 進行訪問許可權檢查,如果檢查失敗,則產生保護性異常

2. 將ss,esp,cs,eip暫存器的值臨時儲存到cpu內部

3. 從任務狀態段(tss)中找到目標**所處特權級的棧資訊,並將段選擇子和棧指標載入到ss和esp暫存器中。這一步進行的動作經常被稱為棧切換。

4. 將第二步儲存的ss和esp暫存器值依次壓入新的棧,這一步的目的是將發起呼叫的**的棧資訊壓入到被呼叫**所使用的棧。

5. 將引數從發起呼叫的棧複製到新的棧。呼叫門中的param count(引數個數)字段描述了要複製的引數個數,這裡是以dwrod為單位i,最多可以複製32個dword。

6. 將第二步儲存的cs和eip值壓入到新的棧中。

7. 將要呼叫的**段的段選擇子和函式偏移分別載入到cs和eip暫存器中。

8. 開始執行被呼叫的**

cpu在處理中斷或異常時,如果cpu當前正在執行使用者**段中的特權級別**,而中斷處理例程位於高特權級別的核心**段中,那麼cpu所做的動作與上面的跨特權級呼叫非常類似,只不過使用的是中斷描述符。windows作業系統使用int 2e 或專門的快速系統呼叫指令來實現從使用者態(低特權)到核心態(高特權)的系統呼叫,沒有使用呼叫門。但是某些rootkit使用呼叫門來從使用者態呼叫核心空間的**。

讀書筆記 跨特權級呼叫

通常發起呼叫的函式和被呼叫的函式都是位於同乙個特權級的 中的,這種呼叫叫做同特權級呼叫,另一種情況是位於不同特權級 段中的 互相呼叫,被稱為跨特權級呼叫。跨特權級呼叫通常是通過乙個所謂的呼叫門 call gate 來完成的。呼叫門的全稱是呼叫門描述符 call gate descriptor 其結構...

跨終端讀書筆記

核心價值 以有限的測試資源最大化測試覆蓋率 資料 友盟等移動分級瀏覽器支援 mgbs 分級 描述測試基準分a主要,b次之,c可選.季度更新 b級別也是可選,根據不同業務的實際情況選擇 標記最新版本 說明 a級為優先順序最高.要求測試過所有的用例.開發要按照上線標準過自測用例.b級是對a級別的補充.要...

函式呼叫堆疊 讀書筆記2

1 ebp 棧底指標 esp 棧頂指標 2 函式裡面的區域性變數屬於指令。彙編 訪問區域性變數是通過ebp指標的偏移量 3 函式呼叫 先壓實參,然後再呼叫函式 形參記憶體00在呼叫函式壓實參時push在棧上給形參開闢記憶體 1 main 函式棧幀上 1 實參入棧,入到形參記憶體 2 被調函式的棧幀 ...