首先打開任務管理器隨便選一個進程
以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 繼續學習