學習進程的句柄表

首先打開任務管理器隨便選一個進程

以explorer.exe爲例

pid爲1388

十六進制爲56C

 

用windbg找到對應的EPROCESS

kd>!process 1388

得到EPROCESS爲81e69688 

 

 

再查看進程的EPROCESS

 

再查看進程的句柄表HANDLE_TABLE

 

注意HANDLE_TABLE中的第一個爲句柄表的項

結構是HANDLE_TABLE_ENTRY     8個字節 64位

如果進程又有新的句柄創建,就要新申請一個HANDLE_TABLE_ENTRY

由於這個HANDLE_TABLE_ENTRY是0xe1788000

看他的後2位 爲00 所以這個句柄表只有一層

所以現在隨便選一個句柄值00b4

計算它對應的對象

首先根據句柄值當做索引 找到對應的HANDLE_TABLE_ENTRY的地址

0xe1788000+b4*2

取這個地址的值,也就是取這個句柄對應的HANDLE_TABLE_ENTRY的值

取高32位

0x81ef4891

當高32位不爲0時 這個值就是對象頭

由於對象頭總是32位對齊 所以將這個高32位的後3位置0(這個我也不明白。。)

所以得到的對象頭是0x81ef4890

再根據對象頭找到對象

0x81ef4890+0x18(我也不知道爲什麼是加,情景分析裏面介紹時說對象頭在對象體的下邊,按理說是應該減0x18)

最後我們就可以找到這個對象了

 

 

!handle 0 3 81e69688 

看看這麼計算找到的對象是否準確

 

 

 

我是菜b 繼續學習

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章