.net - una - leer dll online
¿Cómo puedo detectar el tipo de un dll?(COM,.NET, WIN32) (3)
Debe verificar el encabezado PE de estos archivos. Todos los archivos DLL y ejecutables, Win32 y .NET, tienen un encabezado PE.
Una mirada a fondo en el formato de archivo ejecutable portátil de Win32
Necesito procesar una cantidad de archivos dll y exe en una carpeta y determinar con qué tipo de archivo estoy tratando: .NET, COM, Win32 u otro formulario de vida extraterrestre.
He estado tratando de determinar la forma más fácil de detectar el tipo de DLL, ¿qué piensas de esto?
COM dll => Hago LoadLibrary, luego GetProcAddress para " DllRegisterServer ". Si obtengo una devolución válida, es un archivo COM.
.NET dll => Si el dll depende de MSCOREE.DLL , ¿siempre será un dll de .NET?
Win32 dll => Si ambas pruebas anteriores fallan, ¿es una DLL de Win32?
Seguramente debe haber una mejor manera de detectar qué tipo de dll estamos tratando. Lo anterior es muy torpe, y no funcionará para los archivos EXE? Debe haber alguna otra forma en la que no estoy pensando.
Idealmente, me gustaría poder hacer que el analizador determine con qué compilador se compiló el archivo y qué funciones utiliza, como MFC, Atl, Stl, etc. Pero dudo que eso sea posible en la era previa a la reflexión.
No se requiere DllRegisterServer, la única exportación requerida para un dll COM es DllGetClassObject
No veo una mejor manera de hacerlo. Sin embargo, en 2., en realidad la respuesta es no. Los hosts de tiempo de ejecución casi seguramente también dependerán de mscoree.dll, y esos no son necesariamente ensamblados de .Net.
.Net dlls tiene un descriptor COM, que puede encontrar utilizando dumpbin. No sé cómo obtener esta información del código.
Si está programando en .Net, una forma de determinar si el ensamblado es un ensamblado .Net es tratando de llamar a Assembly.LoadFrom (...).
Bueno, esta no es una respuesta real, sino un conjunto de consejos que analizaría.