Что такое формат файла LIB?
Файл .lib - это библиотечный файл, передаваемый на вход компоновщику. Файлы .lib бывают двух видов: стандартные статические библиотеки и файлы библиотек импорта COFF (Common Object File Format). Статические библиотеки содержат скомпилированные объектные модули .obj; библиотеки импорта содержат заглушки символов и ординалов, указывающие на .dll, предоставляя компоновщику информацию, необходимую для разрешения зависимостей времени выполнения. Инструмент LIB.EXE используется для создания обоих типов библиотечных файлов. На бинарном уровне .lib представляет собой архив формата ar, который начинается с 8-байтовой сигнатуры !<arch> - та же структура используется статическими библиотеками Unix .a. Вы можете просмотреть содержимое с помощью DUMPBIN /HEADERS или ar -t.
Безопасность и защита
РИСК: LOWФайл .lib - это данные времени сборки, а не то, что запускает Windows, поэтому он представляет небольшой прямой риск для конечных пользователей. Для разработчиков проблемой является доверие к цепочке поставок: вредоносная или подделанная статическая библиотека встраивает свой код прямо в вашу программу, поэтому используйте только файлы .lib из доверенных источников SDK и проверяйте контрольные суммы/подписи. Несвязанные архивы .lib игр/приложений являются инертными файлами данных.
Детали формата
в двух словах- Архив игры / приложения (LIB) - Некоторые игры и приложения (например, пакеты ресурсов определенных игр) используют .lib как пользовательский контейнер данных/архив, не связанный с библиотеками компилятора.
Программы, открывающие файлы LIB
Технические подробности
глубокая спецификация| Тип формата | Архив объектных модулей COFF (статическая библиотека) или заглушек импорта (библиотека импорта) |
| Магические байты | 21 3C 61 72 63 68 3E 0A - ASCII «!<arch>\n» со смещением 0 |
| Структура контейнера | Формат архива ar; то же семейство 8-байтовых сигнатур, что и у статических библиотек Unix .a |
| MIME-тип | application/octet-stream |
| Содержимое статической библиотеки | Участники COFF .obj, содержащие скомпилированный машинный код, записи о перемещении и таблицы символов |
| Содержимое библиотеки импорта | Таблица имен символов, имя DLL и заглушки ординалов/имен экспорта - без исполняемого машинного кода |
| Основное использование | Входные данные компоновщика: используются LINK.EXE или ld для разрешения ссылок на символы во время сборки |
| Инструмент создания | LIB.EXE (инструментарий MSVC); также ar и dlltool (GNU Binutils / MinGW) |
| Инструменты проверки | DUMPBIN.EXE /HEADERS, LIB.EXE /LIST, ar -t, nm |
| Индекс символов | Первый участник архива - это карта символов, обеспечивающая быстрый поиск символов при компоновке |
| Генерация библиотеки импорта | Автоматически создается LINK.EXE при сборке DLL; вручную создается с помощью LIB.EXE /DEF:<deffile> |
| Совместимость компоновщиков | Microsoft LINK.EXE, lld-link (LLVM); GNU ld через MinGW с частичной совместимостью |
| Целевая платформа | Преимущественно Windows (Win32 / Win64); устаревшие инструментарии MS-DOS |
| Кодировка | Бинарная; записи COFF выровнены по машинному слову внутри участников архива ar |
| Аналог в Unix | Архив статической библиотеки Unix/Linux .a, создаваемый с помощью ar и используемый ld |
| Происхождение | Реализация COFF от Microsoft; сам COFF восходит к AT&T Unix System V (1983) |
| Выпущен | COFF lineage from Unix (1980s); MS .lib via Visual C++/MS-DOS toolchains, early 1990s |
| Открыть стандартное | Да · без роялти |
| Спецификация | learn.microsoft.com |
Конвертации LIB
Вопросы и ответы сообщества
спрошено пользователямиВопросов пока нет - станьте первым, кто спросит о файлах LIB.