binfmt_misc ( Разный двоичный формат ) - это возможность ядра Linux, которая позволяет распознавать произвольные форматы исполняемых файлов и передавать их в определенные приложения пользовательского пространства , такие как эмуляторы и виртуальные машины . [1] Это один из множества обработчиков двоичного формата в ядре, которые участвуют в подготовке программы пользовательского пространства к запуску. [2]
Исполняемые форматы регистрируются через интерфейс файловой системы специальной файловой системы binfmt_misc
(обычно монтируется в / proc ). Это делается либо непосредственно, посылая специальные последовательности в register
файл Procfs или используя обертку , как Debian -О распределение binfmt-поддержки пакетов [3] или Systemd «s systemd-binfmt.service
. [4] [5]
Регистрация [ править ]
register
Файл содержит строки , которые определяют исполняемые типы , которые будут обрабатываться. Каждая строка имеет вид:
:name:type:offset:magic:mask:interpreter:flags
name
это имя двоичного формата.type
либо,E
либоM
- Если это так
E
, формат исполняемого файла идентифицируется по расширению имени файла :magic
это расширение файла, которое должно быть связано с двоичным форматом;offset
иmask
игнорируются. - Если это так
M
, формат идентифицируется по абсолютномуmagic
номеруoffset
(по умолчанию0
) в файле иmask
представляет собой битовую маску (по умолчанию для всех0xFF
), указывающую, какие биты в номере имеют значение.
- Если это так
interpreter
это программа, которая должна запускаться с соответствующим файлом в качестве аргумента.flags
(необязательно) - строка букв, каждая из которых управляет определенным аспектомinterpreter
вызова:P
сохранить исходное имя программы, введенное пользователем в командной строке - путем добавления этого имени вargv
; theinterpreter
должен знать об этом, чтобы он мог правильно передать этот дополнительный параметр интерпретируемой программе как свойargv[0]
.O
, чтобы открыть файл программы и передать его файловый дескриптор вinterpreter
объект, чтобы он мог прочитать другой нечитаемый файл (для которого пользователь не имеет разрешения «Чтение» ).C
для определения новых учетных данных процесса на основе файла программы, а неinterpreter
файла (см. setuid ); подразумеваетO
флаг.F
чтобы ядро открывало двоичный файл во время настройки, а не лениво во время запуска, чтобы он был доступен внутри других пространств имен монтирования и chroot.
Каждому формату соответствует соответствующая запись файла в /proc/sys/fs/binfmt_misc
каталоге, которую можно прочитать, чтобы получить информацию о данном формате файла.
Обычное использование [ править ]
binfmt_misc позволяет передавать программы Java непосредственно на виртуальную машину Java . [6]
Другое распространенное использование - выполнение исполняемых файлов PE (скомпилированных для MS-DOS или Microsoft Windows ) через Wine . Например, следующая строка будет запускать файлы EXE для DOS и Windows (идентифицируемые кодом типа "MZ" ) с использованием Wine :
:DOSWin:M::MZ::/usr/bin/wine:
Чтобы запустить EXE-файлы (.NET) с помощью Mono : [7] [8]:CLR:M::MZ::/usr/bin/mono:
binfmt_misc также можно комбинировать с QEMU для выполнения программ для других архитектур процессоров, как если бы они были собственными двоичными файлами. [9]
binfmt_misc может использоваться для Go в качестве языка сценариев. [10]
См. Также [ править ]
Ссылки [ править ]
- ^ Поддержка ядра для разных двоичных форматов (binfmt_misc) Документация ядра Linux
- ↑ Как запускаются программы , 28 января 2015 г., Дэвид Дрисдейл, LWN.net.
- ^ Подробная информация о пакете binfmt-support в sid , Debian
- ^ systemd-binfmt.service , freedesktop.org
- ^ binfmt.d , freedesktop.org
- ^ Поддержка двоичного ядра Java (tm) для Linux v1.03 Документация по ядру Linux
- ^ Mono (tm) Поддержка двоичного ядра для Linux Документация по ядру Linux
- ^ Руководство: Запуск моно-приложений
- ^ Официальное зеркало QEMU, QEMU
- ^ Использование Go в качестве языка сценариев в Linux , Cloudflare, 20 февраля 2018 г. , получено 5 мая 2019 г.
Внешние ссылки [ править ]
- Домашняя страница проекта Архивировано на archive.org