Что такое формат файла KO?
Файл .ko - это загружаемый модуль ядра (LKM) для ядра Linux - двоичный плагин, который расширяет функциональность ядра во время работы без необходимости перезагрузки или перекомпиляции. Типичные варианты использования включают драйверы устройств (графика, сеть, хранилище), реализации файловых систем и подсистемы безопасности.
Структурно файл .ko представляет собой перемещаемый объект ELF (тип ET_REL), имеющий те же стандартные магические байты ELF (0x7F 0x45 0x4C 0x46), что и общие библиотеки .so. Отличительной особенностью является секция ELF .modinfo, в которой хранятся метаданные типа «ключ=значение», доступные для чтения через modinfo: автор, описание, лицензия, vermagic (точная версия ядра + строка SMP + ABI) и записи parm для настраиваемых параметров. Соглашение об именовании .ko заменило старый суффикс .o в ядре Linux 2.6 (2003 год).
Модули загружаются с помощью insmod или modprobe и выгружаются с помощью rmmod - все это часть пакета kmod. Строка vermagic должна точно соответствовать работающему ядру; несоответствие приводит к отказу в загрузке. Необязательная секция ELF __versions хранит контрольные суммы CRC32 для каждого экспортируемого символа для проверки ABI.
Начиная с ядра 3.3+, модули дистрибутива обычно сжимаются как .ko.xz, .ko.gz или .ko.zst; modprobe распаковывает их прозрачно. В системах с безопасной загрузкой (Secure Boot) подпись модуля (CONFIG_MODULE_SIG) добавляет подпись RSA или ECDSA после содержимого ELF; ядра с включенным режимом lockdown отклоняют неподписанные модули.
Безопасность и защита
РИСК: HIGHМодули ядра работают с привилегиями ring-0 (ядро) - самым высоким уровнем привилегий. Вредоносный файл .ko может делать что угодно: устанавливать руткиты, перехватывать системные вызовы, отключать аудит. Никогда не загружайте файлы .ko из ненадежных источников. Модули дистрибутива подписаны; Secure Boot обеспечивает проверку подписи модулей. Если .ko отказывается загружаться из-за ошибки подписи, выясните причину, а не отключайте проверку подписи.
Детали формата
в двух словахПрограммы, открывающие файлы KO
Технические подробности
глубокая спецификация| Тип формата | Перемещаемый объект ELF (ET_REL), 32-битный или 64-битный в зависимости от целевой архитектуры |
| Магические байты | 0x7F 0x45 0x4C 0x46 (0x7F за которым следует ASCII «ELF») со смещением 0 - идентично общим библиотекам .so |
| Порядок байтов | Зависит от архитектуры: little-endian на x86/ARM, big-endian на MIPS/PowerPC |
| Ключевая секция ELF | .modinfo - хранит метаданные автора, лицензии, vermagic, версии, parm и alias в виде пар ключ=значение |
| Соблюдение ABI | Строка vermagic в .modinfo кодирует точную версию ядра + флаги SMP; несоответствие вызывает отказ в загрузке |
| CRC символов | Необязательная секция ELF __versions с CRC32 для каждого экспортируемого символа ядра для проверки ABI |
| Подпись модуля | Подпись RSA/ECDSA, добавляемая после данных ELF (CONFIG_MODULE_SIG); ядра с поддержкой lockdown требуют наличия действующей подписи |
| Сжатие | Модули дистрибутива сжимаются как .ko.xz, .ko.gz или .ko.zst; modprobe распаковывает их прозрачно (ядро 3.3+) |
| Инструменты загрузки | insmod (прямая загрузка), modprobe (с учетом зависимостей), rmmod (выгрузка) - все части пакета kmod |
| Инструмент метаданных | modinfo(8) читает секцию .modinfo; depmod(8) строит карту зависимостей modules.dep |
| Типичный размер | 5 КБ - 10 МБ (модули драйверов устройств сильно различаются) |
| История именования | Суффикс .ko заменил .o для модулей ядра, начиная с Linux 2.6.0 (2003 год) |
| Переносимость | Только Linux; несовместим с другими системами на базе ELF без инфраструктуры модулей на стороне ядра |
| Выпущен | 2003 (Linux kernel 2.6; .ko replaced .o module naming convention) |
| Последняя версия | N/A (ELF format is stable; kernel ABI versioning via vermagic string) |
| Открыть стандартное | Да · без роялти |
| Спецификация | www.kernel.org |
Конвертации KO
Вопросы и ответы сообщества
спрошено пользователямиВопросов пока нет - станьте первым, кто спросит о файлах KO.