Зарегистрированный пользовательский исполняемый формат также описывается объектом типа `linux_binfmt`?

Понимание ядра 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 ответ

В 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 и затем эта функция находит соответствующий зарегистрированный исполняемый тип, если таковой имеется, загружает соответствующий интерпретатор и устанавливает среду выполнения соответствующим образом.

Другие вопросы по тегам