Могу ли я получить архитектуру процессора, программно загрузив dll в С#?
Есть ли класс, который может это сделать?
Мне нужно узнать, является ли dll x86, x64, MSIL и т. д.
Могу ли я получить архитектуру процессора, программно загрузив dll в С#?
Есть ли класс, который может это сделать?
Мне нужно узнать, является ли dll x86, x64, MSIL и т. д.
Предполагая, что вы просматриваете только сборки .net, вы можете использовать CorFlags.exe для просмотра заголовка изображения.
В этом сообщении блога объясняется, как определить как читать результаты. Выдержка:
Использование: сборка Corflags.exe [варианты]
Если параметры не указаны, отображаются флаги для данного изображения.
...
Вот что означает каждый компонент заголовка:
Версия: содержит версию .NET Redist, с помощью которой был создан двоичный файл.
Заголовок CLR: 2.0 указывает на образ .Net 1.0 или .Net 1.1 (Everett), а 2.5 указывает на образ .Net 2.0 (Whidbey).
CorFlags: вычисляется специальными флагами OR’g, чтобы указать, является ли изображение ТОЛЬКО ILONLY, его битность и т. д. и используется загрузчиком. ТОЛЬКО: управляемые образы могут содержать собственный код. Чтобы быть «любым процессором», изображение должно содержать только IL.
32BIT: даже если у вас есть образ, который содержит только IL, он все равно может зависеть от платформы, флаг 32BIT используется для отличия образов «x86» от образов «любой процессор». 64-битные образы отличаются тем, что они имеют тип PE PE32+.
Наиболее интересным аспектом является PE и флаг 32BIT заголовка. Они объединяются, чтобы указать типы сборки. Вот как они будут выглядеть для:
- любой процессор: PE = PE32 и 32BIT = 0
- x86: PE = PE32 и 32BIT = 1
- 64-разрядная версия: PE = PE32+ и 32BIT = 0
Попытка выяснить это, загрузив сборку, — это вопрос курицы и яйца. Если вы не получите исключение BadImageFormatException, значит, арка подходит, и вас больше не волнует, что это такое. Если вы получаете исключение, значит конфигурация программы неверна. Вы ничего не можете сделать с этим в коде.
ReflectionOnlyLoadFrom
. stackoverflow.com/q/9470199/103167
- person Ben Voigt; 27.02.2012
Вы также можете прочитать файл сборки с помощью FileStream. Формат исполняемых файлов Windows указан в спецификации Microsoft pe/coff. Вы можете прочитать это здесь:
http://www.microsoft.com/whdc/system/platform/firmware/pecoff.mspx