系統服務調度表

系統服務調度表

系統服務調度表(System Service Dispatch Table),該表可以基於系統服務編號進行索引,來定位函式記憶體地址。

基本介紹

  • 中文名:系統服務調度表
  • 外文名:System Service Dispatch Table
  • 簡稱:SSDT
  • 定義:系統服務編號進行索引,定位地址
  • 系統:計算機
  • 套用學科:計算機原理
概述,使用系統服務調度,

概述

SSDT(system service dispatch table,系統服務調度表)是核心中的一個數據結構,在系統服務調用過程中,最終會在核心態查找此表來找到系統服務函式的地址,因此通過修改此表就可以鉤掛系統服務函式。
一旦Rootkit作為設備驅動程式載入後。它可以將SSDT對應函式地址改為指向它所提供的函式。當應用程式調用核心服務時,系統服務調度程式會根據服務號查找SSDT。並且調用Rootkit函式。這時,Rootkit可以獲得控制權,並去除期望隱藏的對象信息,從而有效地隱藏自身以及所用的資源。
SSDT的作用是滿足處於用戶模式下的程式執行系統函式這一個需求,處於用戶模式下的程式可以通過系統提供的機制藉助SSDT查找用戶請求與系統服務的對應關係,進而使得將處於用戶模式下的程式請求遷移到核心模式下進行處理成為可能,這個過程稱為系統服務調度。
需要注意的是,SSDT及與其相關的若干機制並非是在CPU中實現的,而是由作業系統提供的。在Windows作業系統中,應用程式通常使用SYSENTER、SYSCALL或INT 0x2E執行系統服務調度功能。系統接收到相關請求後會在核心中調用KiFastCallEntry()函式,然後在導出的變數KeServiceDescriptorTable中獲取當前SSDT的地址。此函式會從eax暫存器中讀取系統調用的編號,並在SSDT中查詢該調用。

使用系統服務調度

系統服務調用,產生在Windows NT中作為異常處理的陷阱,從系統擴展性角度而言是重要的。核心執行系統調用的方式使得新的服務可被動態地加入今後推出的作業系統中。
無論何時用戶態執行緒調用系統服務,執行緒都將突然被允許運行特權作業系統代碼。通常這對於作業系統來說是很討厭的。用戶態執行緒可能破壞系統的數據結構或在記憶體中移動一些內容,對系統和用戶產生巨大破壞。正因為如此,處理器通常提供一條只用於系統服務的特殊指令。該指令在MIPS上是syscall,在Intel x86處理器上是int 2Eh在用戶態執行緒調用系統服務時產生。硬體產生一陷阱並從用戶態切換到核心態執行。當產生這個情況時,核心從執行緒的用戶態堆疊複製調用程式的自變數到核心態堆疊(以使用戶無法強行改變自變數),然後執行系統服務。
如圖所示,核心用系統服務調度表查找系統服務,該表與前面描述的中斷分配表相似,只是每個入口點中包含指向系統服務的指針,而不是指向中斷處理程式的指針。
使用系統服務調度表為本機NT服務的可擴充性提供了條件。核心通過擴充該表即可支持新的系統服務,而無需改變系統或應用程式。編寫完新的服務後,系統管理員只需運行一工具程式即可動態創建一個新的調度表。在新的表中將包含指向新的系統服務的另一個入口點。
系統服務調度表

相關詞條

熱門詞條

聯絡我們