Является ли зарегистрированный пользовательский исполняемый формат также описанным объектом типа `linux_binfmt`? - PullRequest
0 голосов
/ 20 сентября 2018

Понимание ядра Linux говорит

Исполняемый формат описывается объектом типа linux_binfmt, который по существу предоставляет три метода: load_binary, load_shlibи core_dump.

и

Linux позволяет пользователям регистрировать свои собственные пользовательские исполняемые форматы.Чтобы зарегистрировать новый формат, пользователь записывает в файл реестра специальной файловой системы binfmt_misc (обычно смонтированной на /proc/sys/fs/binfmt_misc) строку следующего формата:

:name:type:offset:string:mask:interpreter:flags

Когда ядро ​​определяет, что исполняемый файлимеет собственный формат, он запускает соответствующую программу интерпретатора.Программа интерпретатора работает в режиме пользователя, получает в качестве параметра путь к исполняемому файлу и выполняет вычисления.Например, исполняемый файл, содержащий программу на Java, обрабатывается виртуальной машиной Java, такой как /usr/lib/java/bin/java.

Хотя это и не упоминается, это зарегистрированный настраиваемый исполняемый формат, также описываемыйобъект типа linux_binfmt?

Если да, регистрация пользовательского исполняемого формата не требует явного предоставления методов load_binary, load_shlib и core_dump.Три метода созданы неявно из регистрации?

Без метода load_binary, какой метод вызывается ядром для выполнения исполняемых файлов зарегистрированного исполняемого формата через соответствующий интерпретатор?

1 Ответ

0 голосов
/ 21 сентября 2018

В случае binfmt-misc объект linux_binfmt соответствует самому модулю binfmt-misc.Модули не должны обеспечивать реализацию всех функций;binfmt-misc объявляет только реализацию load_binary:

static struct linux_binfmt misc_format = {
    .module = THIS_MODULE,
    .load_binary = load_misc_binary,
};

(binfmt_script, которая реализует поддержку сценариев на основе shebang, имеет аналогичное объявление.)

load_misc_binary имеет дело со спецификой всех зарегистрированных исполняемых типов, когда ядро ​​вызывает ее.Ядро вызывает load_misc_binary, и затем эта функция находит соответствующий зарегистрированный исполняемый тип, если таковой имеется, загружает соответствующий интерпретатор и устанавливает среду выполнения соответствующим образом.

...