Как проверить, является ли файл DLL?
Вопрос
Учитывая файл, я хочу проверить, является ли это DLL, общим объектом (Linux), dylib (Mac OS X) или чем-то другим.Мой основной интерес — различие исполняемых файлов и DLL в Linux и Mac OS X.Для Windows расширения должно быть достаточно для моей проблемы.
Я уже проверил, что метод магических чисел не работает в Linux, поскольку исполняемые и общие объекты имеют одинаковые номера.
Решение
Команда Unix (Linux и Mac OS X) file
знает, как идентифицировать типы файлов.
man file
расскажет вам о «магической» информации, используемой для этого, и, в частности, о том, где можно найти файл с этой информацией.
man 5 magic
подробно описывает файл, а также сообщает, где он находится.Вы можете заглянуть туда и вытащить оттуда все, что вам нужно.И/или просто записать код из источника file
.
Обновлять:
Обратите внимание, что в Linux файл может быть оба исполняемый файл и общая библиотека одновременно.
Одним из примеров является /lib/libc.so.6
(общая библиотека, которую можно выполнить).
Другой пример:любой исполняемый файл, созданный с помощью -pie
флаг можно использовать как общую библиотеку.Видеть этот ответьте за подробностями.
Другие советы
Использовать file
инструмент (для Linux и Mac OS).
Напишите программу, попробуйте загрузить DLL - если получится, то она одна :)
Редактировать:Хорошо, это может сработать и для исполняемых файлов :-/