系統呼叫 SharedCode

2022-05-15 10:33:07 字數 1157 閱讀 7420

sharedcode

sharedcode是參考reactos取的名, 之所以稱為"shared"是因為不管是kisysteservice還是kifastcallentry,正常流程都會執行到這個位置. sharedcode裡面才包含真正的呼叫目標函式的過程, kisystemservice和kifastcallentry中只是做了一些資料儲存相關的操作.

獲取系統服務表

一進入sharedcode首先會對系統服務號進行處理.

bit12~bit13用來表示目標系統服務是哪個模組, 姑且稱為系統服務模組號. 0:nt模組 1:win32k 2和3未使用.

ethread.tcb.servicetable指向了乙個陣列, 這個資料報含了4個system_service_table結構, system_service_table結構大小是16個位元組, 也就是0x10

檢查索引是否越界

系統服務號的bit0~bit11一共12位, 用來表示函式位址表和函式引數表的索引.

ksystem_service_table.numberofservice表示了函式的個數. 如果索引 >= 個數, 說明索引越界了.

載入win32k

當系統服務模組號為1,表示這個模組是win32k. win32k在程序建立的時候並不會被立即載入, 而是懶載入:第一次呼叫win32k相關的函式時載入.

系統呼叫

執行到最後,這裡才是關鍵步驟:

read系統呼叫,mmap系統呼叫

read系統呼叫,mmap系統呼叫 2012 07 23 09 54 28 分類 linux 標籤 linux 檔案系統 虛擬記憶體 儲存系統 字型大小 訂閱 一般情況下,操作檔案既可以使用標準i o,也可直接使用系統呼叫。兩者有何區別呢?在輸入輸出中,直接使用底層的系統呼叫效率是非常低的,為什麼?...

庫呼叫,系統呼叫

通過這個問題,可以判斷候選人是否具有豐富的程式設計經驗以及是否具有找出這類問題答案的敏銳感覺。簡明的回答是 函式庫呼叫是語言或應用程式的一部分,而系統呼叫是作業系統 的一部分。你要確保弄懂 trap 自陷 這個關鍵字的含義。系統呼叫是在作業系統核心發現乙個 trap 或中斷後進行的。函式庫呼叫 vs...

系統呼叫 函式呼叫

linux下對檔案操作有兩種方式 提供了庫函式,如open close read write ioctl 等,需包含標頭檔案unistd.h。以write 函式為例 其函式原型為size t write int fd,const void buf,size t nbytes 其操作物件為檔案控制代碼...