Dot-Net
這個 DLL 是託管的還是非託管的?
我在你面前有一個 DLL。只使用 Win32 SDK,你能告訴我這個 DLL 是否是一個 .NET 程序集嗎?
為什麼?我們的應用程序以 DLL 的形式載入外掛。我們正在嘗試擴展這些外掛的定義以允許 .NET 程序集,但介面會有所不同,因此載入器在載入之前需要知道 DLL 是託管的還是非託管的。
您可以檢查 PE 頭資訊以獲取有關 DLL 中包含的資訊類型的資訊。本文詳細介紹瞭如何實現這一點。
要確定 DLL(或 EXE)是託管的還是非託管的,請使用switch
dumpbin.exe``/dependents。如果您mscoree.dll在輸出中看到,則程序集是託管程序集。例如,對於我在 Visual Studio 2010 中創建的託管 DLL,我得到以下輸出:
Dump of file <MANAGED_DLL>.dll File Type: DLL Image has the following dependencies: mscoree.dll Summary 2000 .reloc 2000 .rsrc 2000 .sdata 12000 .text
dumpbin.exe作為Visual Studio 工具的一部分提供。要執行它,一個方便的方法是通過Visual Studio 命令提示符。例如,在我執行 Visual Studio 2010 的 Windows 7 機器上,我在 Windows 開始菜單中找到了 Visual Studio 命令提示符:Microsoft Visual Studio 2010 => Visual Studio 工具=> Visual Studio 命令提示符 (2010)
然後,在 Visual Studio 命令提示符中輸入:
dumpbin /dependents DLL_OF_INTEREST.DLL要麼
dumpbin /dependents EXE_OF_INTEREST.EXE**作為替代方案,**您可以使用
corflags.exeVisual Studio 工具中也包含的實用程序。在非託管程序集上從 Visual Studio 命令提示符執行它:corflags UNMANAGED.DLL..你會得到:
corflags : error CF008 : The specified file does not have a valid managed header…而在託管程序集上,您將獲得以下內容:
Version : v2.0.50727 CLR Header: 2.5 PE : PE32 CorFlags : 1 ILONLY : 1 32BIT : 0 Signed : 0有關的: