Лучший способ проверить, является ли файл DLL блоком CLR в C#

Добавьте этот PPA к своей системе:

https://launchpad.net / ~ kamalmostafa / + archive/dellxps

изменения, надо надеяться, в конечном счете превратят его в ядро архива Ubuntu, но на данный момент который включит вещи.

17
задан Peter Mortensen 29 April 2011 в 17:09
поделиться

2 ответа

Проверьте заголовок PE:

Заголовок DOS начинается с 0x0, DWORD - с 0x3c содержит указатель на PE подпись (обычно 0x80), которая равна 4 байтов, следующие 20 байтов - это COFF заголовок, а затем заголовок PE (по адресу 0x9. Заголовок PE составляет 224 байта и содержит каталог данных (на 96 байтов в PE-заголовок = 0xf. В 15-я запись (0x16 - заголовок CLR дескриптор (иногда называемый COM дескриптор, но у него нет ничего общего с COM). Если это пустой (т.е. 0 в 8 байтах от 0x168 до 0x16f), то файл не является .NET сборка. Если вы хотите проверить, не это COM-DLL, тогда вам следует обратить внимание на посмотрите, экспортирует ли он GetClassObject.

Ссылка

ОБНОВЛЕНИЕ : есть более «.NET» способ сделать это:

Используйте метод Module.GetPEKind и проверьте ​​PortableExecutableKinds Перечисление:

NotAPortableExecutableImage Файл не находится в переносимом исполняемом файле (PE) формат файла.

ILOnly Исполняемый файл содержит только промежуточный язык Microsoft (MSIL) и поэтому нейтрален с в отношении 32-битных или 64-битных платформ.

Required32Bit Исполняемый файл может быть запущен на 32-битной платформе или в 32-битная Windows в Windows (WOW) окружение на 64-битной платформе.

PE32Plus Исполняемый файл требует 64-битной платформы.

Unmanaged32Bit Исполняемый файл содержит чистый неуправляемый код.

18
ответ дан 30 November 2019 в 13:05
поделиться

Столкнувшись с той же проблемой в прошлом, я прибег к использованию вашего подхода отражения, потому что альтернативой является чтение вручную заголовок PE как это . Для моего сценария это показалось излишним, но оно может быть вам полезно.

2
ответ дан 30 November 2019 в 13:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: