Как я могу определить тип dll? (COM,.NET, WIN32)

Мне нужно обработать несколько файлов dll и exe в папке и определить, с каким типом файлов я сталкиваюсь:.NET, COM, Win32 или другая чужая форма жизни.

Я пытаюсь определить самый простой способ определить тип DLL, что вы думаете об этом:

  • COM dll = > Я делаю LoadLibrary, а затем GetProcAddress для " DllRegisterServer". Если я получаю действительный возврат, это COM файл.

  • .NET dll = > Если dll зависит от MSCOREE.DLL, она всегда является .NET dll?

  • Win32 dll = > Если оба вышеуказанных теста терпят неудачу, это Win32 dll?

Конечно, должен быть лучший способ определить, с каким типом dll мы имеем дело. Вышеупомянутое очень неудобно и не будет работать для EXE файлов? Должен быть какой-то другой способ, о котором я не думаю.

В идеале я бы хотел, чтобы анализатор определял, с каким компилятором был скомпилирован файл, и какие функции он использует, например, MFC, Atl, Stl и т.д. Но я сомневаюсь, что это возможно в предварительном отражении эпоха?

Ответы

Ответ 2

DllRegisterServer не требуется, единственным обязательным экспортом для dll COM является DllGetClassObject

Ответ 3

Я не вижу лучшего способа сделать это. Однако в 2. на самом деле ответ отрицательный. Хосты Runtime почти наверняка также зависят от mscoree.dll, и это не обязательно .Net-сборки.

.Net dll имеют дескриптор COM, который вы можете найти с помощью dumpbin. Я не знаю, как получить эту информацию из кода.

Если вы программируете в .Net, один из способов определить, является ли сборка сборкой .Net, попробуйте вызвать Assembly.LoadFrom(...).

Ну, это не реальный ответ, а набор подсказок, которые я бы изучил.