學習到控制代碼知識的時候,看一下控制代碼表的知識點。核心在為當前程序開啟目標物件之後,即在當前程序與目標物件之間建立起聯絡之後,就會返回控制代碼,以供程序的後續操作。
每個有效的控制代碼都對應著控制代碼表中的乙個表項,表項在控制代碼表中的位置取決於控制代碼的值。每當程序建立或者開啟乙個物件,要為之建立控制代碼並將其插入控制代碼表的時候,需要乙個臨時的handle_table_entry資料結構,用excreatehandle將其安裝到控制代碼表中,而該函式返回控制代碼,控制代碼的值表明了安裝的位置,也是目標表項在控制代碼表中的下標。
並且控制代碼都是4的倍數,控制代碼返回失敗不能是0,因為控制代碼表地0項用作審計,不是對應真正handle_table_entry,失敗返回是-1。
所謂開啟乙個物件,就是說在乙個程序與乙個物件之間建立起一種連線,一座橋梁。控制代碼,就是實現這個橋梁的乙個媒介。
所以,每個程序都得有自己的控制代碼表,用來存放和管理與程序相關的物件。每乙個程序都有自己的程序控制代碼表,控制代碼表的分配記憶體,按照4kb(4096位元組)來申請記憶體,每申請乙個新的頁面,控制代碼表的容量增加(512個),因為控制代碼表項的結構為handle_table_entry(8位元組),handle_table存放在eprocess結構體中:
0
: kd> dt _eprocess
nt!_eprocess
列舉核心控制代碼表 Windows核心學習筆記
前面我寫過有關核心控制代碼表的一些知識,今天來在這裡跟大家分享一下我自己寫的核心列舉程序控制代碼方法。include enumprocesshandletable.h ifdef win64 define handle table 0x200 硬偏移win7x64下的handle table欄位在e...
核心物件 Windows核心學習筆記
物件,是乙個特殊的資料結構,用來定義受保護得實體,我們平時所說得物件實際上是物件體,例如程序物件,就是eprocess。所以核心物件不能直接被使用者層進行操作,那我們只能通過控制代碼。控制代碼是乙個指向物件得指標。物件具有唯一性,但是控制代碼可以有多個,也就是說乙個物件可以有多個控制代碼來引用它,對...
linux核心學習 核心鍊錶
資料結構是程式設計中很重要的一部分.鍊錶是一種資料結構,程式設計中,我們為了實現鍊錶這種資料結構,常常需要完成他的初始化,新增,遍歷,新增,刪除等功能.針對n多種鍊錶來講,除了內容不同外,但這些 新增,刪除,遍歷操作其實都是可以寫成公共 的,不必每次需要實現一種鍊錶,就重新寫一遍新增,刪除,遍歷的操...