1. 程式人生 > >[WinDBG 技巧] 列舉所有Handle(控制代碼)以及檢視Handle 資訊

[WinDBG 技巧] 列舉所有Handle(控制代碼)以及檢視Handle 資訊

WinDBG的 !handle 命令可以讓你方便除錯控制代碼(handle)。

檢視程序內所有控制代碼, 輸入命令列 

0:014> !handle
Handle 4
  Type          Directory
Handle 8
  Type          Process
Handle c
  Type          Key
Handle 10
  Type          Mutant
Handle 14
  Type          ALPC Port
Handle 18
  Type          Key
Handle 1c
  Type          Event
Handle 20
  Type          Key

 ... (省略)

Handle 7e0
  Type          Mutant
392 Handles
Type            Count
None            17
Event           134
Section         47
File            35
Directory       3
Mutant          34
WindowStation   2
Semaphore       24
Key             47
Token           1
Process         3
Thread          27
Desktop         1
IoCompletion    4
Timer           5
Job             1
KeyedEvent      1
TpWorkerFactory 6


從WinDBG輸出結果我們可以看到所有控制代碼的型別和值,以及統計資訊(一共392個handle,其中有35個檔案控制代碼,47個登錄檔控制代碼 .... )。

如果想檢視某個控制代碼的詳細資訊, 可以用命令:

0:014> !handle 0x5c8 f
Handle 5c8
  Type          Key
  Attributes    0
  GrantedAccess 0x20019:
         ReadControl
         QueryValue,EnumSubKey,Notify
  HandleCount   2
  PointerCount  3
  Name          /REGISTRY/USER/S-1-5-21-2127521184-1604012920-1887927527-2966534/Software/Microsoft/Windows/CurrentVersion/Explorer/FileExts
  Object Specific Information
    Key last write time:  16:52:14. 5/20/2009
    Key name FileExts

0x5c8 是控制代碼的值, 引數f 表示顯示全部資訊。 我們可以看到控制代碼0x5c8 是登錄檔控制代碼,路徑為/REGISTRY/USER/S-1-5-21-2127521184-1604012920-1887927527-2966534/Software/Microsoft/Windows/CurrentVersion/Explorer/FileExts。

值得一提的是,WinDBG 還提供了!htrace 命令,可以很方便來用檢查控制代碼洩露(Handle Leak), 下次再寫篇blog 專門介紹 !htrace