Вопрос

Учитывая файл, я хочу проверить, является ли это 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 - если получится, то она одна :)

Редактировать:Хорошо, это может сработать и для исполняемых файлов :-/

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top