Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is this DLL managed or unmanaged?

Tags:

I hold before you a DLL. Using only the Win32 SDK, can you tell me if this DLL is a .NET assembly?

Why? Our application loads plugins in the form of DLLs. We are trying to extend the definition of these plugins to allow for .NET assemblies but the interface will be different and thus the loader will need to know if the DLL is managed or unmanaged before loading it.

like image 750
Charles Avatar asked Mar 11 '11 17:03

Charles


People also ask

Is a dll unmanaged code?

dll is definitely unmanaged - it's part of Windows. If you want to check, try to add the file as a reference to your project - if it adds ok, it's managed.

What is managed and unmanaged dll?

The term "managed code" usually refers to code written in a managed language, such as Java or C#. The term "unmanaged code" usually refers to code written in an unmanaged language, such as C or C++. If you're coming from the . NET world, "managed" probably means C# or VB.NET, and "unmanaged" probably means C or C++.

Is C++ managed or unmanaged code?

The application written in VB 6.0, C, C++, etc are always in unmanaged code.

What is managed code and unmanaged code in C#?

Managed code is the one that is executed by the CLR of the . NET framework while unmanaged or unsafe code is executed by the operating system. The managed code provides security to the code while undamaged code creates security threats.


1 Answers

To determine whether a DLL (or EXE) is managed or unmanaged, use dumpbin.exe with the /dependents switch. If you see mscoree.dll in the output, then the assembly is a managed assembly.

For example, for a managed DLL that I created in Visual Studio 2010, I get the following output:

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 is delivered as part of the Visual Studio Tools. To run it, a convenient way to do so is via the Visual Studio Command Prompt. For example, from my Windows 7 machine running Visual Studio 2010, I find the Visual Studio Command Prompt in the Windows Start Menu at:

Microsoft Visual Studio 2010 => Visual Studio Tools => Visual Studio Command Prompt (2010)

Then, within the Visual Studio Command Prompt just enter:

dumpbin /dependents DLL_OF_INTEREST.DLL 

or

dumpbin /dependents EXE_OF_INTEREST.EXE 

As an alternative, you can use the corflags.exe utility that is also included with Visual Studio Tools. Running it from the Visual Studio Command Prompt on an unmanaged assembly:

corflags UNMANAGED.DLL 

..you'll get:

corflags : error CF008 : The specified file does not have a valid managed header 

...whereas on a managed assembly, you'll get something like:

Version   : v2.0.50727 CLR Header: 2.5 PE        : PE32 CorFlags  : 1 ILONLY    : 1 32BIT     : 0 Signed    : 0 

Related:

  • How to determine if a .NET assembly was built for x86 or x64?, and
  • How can I detect the type of a dll? (COM, .NET, WIN32).
like image 59
DavidRR Avatar answered Sep 30 '22 19:09

DavidRR