Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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; the interpreterдолжен знать об этом, чтобы он мог правильно передать этот дополнительный параметр интерпретируемой программе как свой 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]

См. Также [ править ]

Ссылки [ править ]

  1. ^ Поддержка ядра для разных двоичных форматов (binfmt_misc) Документация ядра Linux
  2. Как запускаются программы , 28 января 2015 г., Дэвид Дрисдейл, LWN.net.
  3. ^ Подробная информация о пакете binfmt-support в sid , Debian
  4. ^ systemd-binfmt.service , freedesktop.org
  5. ^ binfmt.d , freedesktop.org
  6. ^ Поддержка двоичного ядра Java (tm) для Linux v1.03 Документация по ядру Linux
  7. ^ Mono (tm) Поддержка двоичного ядра для Linux Документация по ядру Linux
  8. ^ Руководство: Запуск моно-приложений
  9. ^ Официальное зеркало QEMU, QEMU
  10. ^ Использование Go в качестве языка сценариев в Linux , Cloudflare, 20 февраля 2018 г. , получено 5 мая 2019 г.

Внешние ссылки [ править ]

  • Домашняя страница проекта Архивировано на archive.org