Ответ 1
Вы должны проверить PE Header этих файлов. Все DLL и исполняемые файлы, Win32 и .NET, имеют PE-заголовок.
Углубленный взгляд на портативный формат исполняемых файлов 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 и т.д. Но я сомневаюсь, что это возможно в предварительном отражении эпоха?
Вы должны проверить PE Header этих файлов. Все DLL и исполняемые файлы, Win32 и .NET, имеют PE-заголовок.
Углубленный взгляд на портативный формат исполняемых файлов Win32
DllRegisterServer не требуется, единственным обязательным экспортом для dll COM является DllGetClassObject
Я не вижу лучшего способа сделать это. Однако в 2. на самом деле ответ отрицательный. Хосты Runtime почти наверняка также зависят от mscoree.dll, и это не обязательно .Net-сборки.
.Net dll имеют дескриптор COM, который вы можете найти с помощью dumpbin. Я не знаю, как получить эту информацию из кода.
Если вы программируете в .Net, один из способов определить, является ли сборка сборкой .Net, попробуйте вызвать Assembly.LoadFrom(...).
Ну, это не реальный ответ, а набор подсказок, которые я бы изучил.