2014-04-04 33 views
3

使用windbg,通過!dlls命令獲得負載計數的dll列表。觀察到許多加載dll的負載計數爲0x0000ffff。 這是一個默認值嗎?
這是否意味着什麼?是0x0000ffff在Windows中的DLL的默認加載計數?

 0x00262fa8: C:\WINDOWS\system32\ole32.dll 
     Base 0x774e0000 EntryPoint 0x774fd0b9 Size  0x0013d000 
     Flags 0x80084006` LoadCount 0x0000ffff TlsIndex 0x00000000 
      LDRP_STATIC_LINK 
      LDRP_IMAGE_DLL 
      LDR**strong text**P_ENTRY_PROCESSED 
      LDRP_PROCESS_ATTACH_CALLED 
+1

LDRP_STATIC_LINK是提示。當程序調用LoadLibrary(「ole32.dll」)並調用FreeLibrary()兩次時,將負載計數設置爲較高值可以避免災難。) –

回答

4

The Covert Way to find the Reference Count of DLL

一個DLL的負載計數是一個16位的值。如果該值被視爲有符號的short,則爲-1(0xfffff),表示該DLL是靜態鏈接的,否則會動態加載。

+0

如果DLL是靜態鏈接的,在FreeLibrary期間負載計數是否會有影響? – Balu

+2

我不知道操作系統是否專門處理那個值(並且不會減少它),或者如果它繼續並遞減它。您應該很容易爲該場景編寫測試。我有我的猜測(因爲它對'LoadLibrary()'''FreeLibrary()'是靜態鏈接的DLL)是有效的),但你應該自己運行一些測試。 –