Регистрация бинарных форматов в ядре

Tags: •  • 

Для этого в ядре должно быть включено:
Executable file formats
`-Kernel support for MISC binaries

Если внимательно прочитать описание пункта, то можно легко отыскать способ регистрации разных типов исполняемых файлов:
Монтируем виртуальную фс binfmt_misc
mount binfmt_misc -t binfmt_misc /proc/sys/fs/binfmt_misc

Зарегистрируем теперь wine как wrapper для *.exe:
echo ':EXE:E::exe::/usr/bin/wine:' >> /proc/sys/fs/binfmt_misc/register

Формат таков:
:имя:тип:смещение:магическое_число:маска:путь_до_интерпретатора:

  • имя - название формата. в /proc/sys/fs/binfmt_misc появится файл, названный так же, с информацией о формате (кроме указанного в опциях там ничего не будет)
  • тип - E или M - определять формат по расширению или содержимому, соответственно.
  • смещение - где искать магическое число в файле (смещение в байтах)
  • магическое_число - последовательность байтов, которая определяет тип файла (либо как есть, либо в HEX: \x0a и т.д. - не проверял, как работает) , или расширение файла, если использован параметр E. Стоит заметить, что регистр символов имеет значение.
  • маска - маска для магического числа. Если не указать, будет 0xff
  • путь_до_интерпретатора - здесь надо указать полный путь к программе, которой будет передано имя исполняемого файла как 1-й аргумент.

Параметры не всем нужны, но могут понадобиться в некоторых случаях. Так что читайте документацию.

Дополнительную информация об этой возможности - в директории с исходными кодами ядра: Documentation/binfmt_misc.txt

хорошее дело я

хорошее дело
я когда то пытался .java запускать, только что то там не вышло
добавлю что "магическое_число" можно подсмотреть в базе данных утилитки file
в общем man file и смотрим где эта база. формат базы описан в ней самой в коментариях

--
Signature invent in progress 19% #.........

как это, .java? мож

как это, .java? может, таки .class? или .jar?

а. .jar Ж:-) и .class да

а. .jar Ж:-) и .class да Ж:-)
--
Signature invent in progress 19% #.........