Dot-Net

這個 DLL 是託管的還是非託管的?

  • March 11, 2011

我在你面前有一個 DLL。只使用 Win32 SDK,你能告訴我這個 DLL 是否是一個 .NET 程序集嗎?

為什麼?我們的應用程序以 DLL 的形式載入外掛。我們正在嘗試擴展這些外掛的定義以允許 .NET 程序集,但介面會有所不同,因此載入器在載入之前需要知道 DLL 是託管的還是非託管的。

您可以檢查 PE 頭資訊以獲取有關 DLL 中包含的資訊類型的資訊。本文詳細介紹瞭如何實現這一點

要確定 DLL(或 EXE)是託管的還是非託管的,使用switchdumpbin.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

有關的:

引用自:https://stackoverflow.com/questions/5275985