注册的自定义可执行文件格式是否也由“linux\u binfmt”类型的对象描述?
理解Linux内核意味着 可执行格式由注册的自定义可执行文件格式是否也由“linux\u binfmt”类型的对象描述?,linux,linux-kernel,executable-format,Linux,Linux Kernel,Executable Format,理解Linux内核意味着 可执行格式由linux\u binfmt类型的对象描述, 它基本上提供了三种方法:load\u binary,load\u shlib, 和core\u dump 及 Linux允许用户注册自己的自定义可执行文件格式。 要注册新格式,用户将写入 binfmt_misc特殊文件系统(通常安装在 /proc/sys/fs/binfmt_misc)具有以下格式的字符串: :name:type:offset:string:mask:interpreter:flags 当内核确
linux\u binfmt
类型的对象描述,
它基本上提供了三种方法:load\u binary
,load\u shlib
,
和core\u dump
及
Linux允许用户注册自己的自定义可执行文件格式。
要注册新格式,用户将写入
binfmt_misc特殊文件系统(通常安装在
/proc/sys/fs/binfmt_misc
)具有以下格式的字符串:
:name:type:offset:string:mask:interpreter:flags
当内核确定可执行文件具有自定义
格式化后,启动正确的解释器程序。翻译
程序在用户模式下运行,接收的路径名作为其参数
可执行文件,并进行计算。例如
包含Java程序的可执行文件由Java虚拟机处理
机器,如/usr/lib/java/bin/java
虽然没有提到这一点,但是注册的自定义可执行文件格式是否也由linux\u binfmt
类型的对象描述
如果是,注册自定义可执行文件格式不需要我们明确提供load\u binary
、load\u shlib
和core\u dump
方法。这三个方法是从注册隐式创建的吗
如果没有
load\u binary
方法,内核会调用什么方法来通过相应的解释器执行已注册可执行格式的可执行文件?在binfmt misc
的情况下,linux\u binfmt
对象对应于binfmt misc
模块本身。模块不必提供所有功能的实现<代码>binfmt misc:
(binfmt_脚本
,它实现了对基于shebang的脚本的支持,具有类似的声明。)
处理内核调用时所有已注册可执行文件类型的细节。内核调用
load\u misc\u binary
,然后该函数找到匹配的已注册可执行类型(如果有),加载相应的解释器,并根据需要设置执行环境。在binfmt misc
的情况下,linux_binfmt
对象对应于binfmt misc
模块本身。模块不必提供所有功能的实现<代码>binfmt misc:
(binfmt_脚本
,它实现了对基于shebang的脚本的支持,具有类似的声明。)
处理内核调用时所有已注册可执行文件类型的细节。内核调用load\u misc\u binary
,然后该函数找到匹配的已注册可执行文件类型(如果有),加载相应的解释器,并根据需要设置执行环境。内核不是“调用misc可执行文件”,它只是调用已注册的解释器(这是“正常的”),通常为elf,本身为二进制)。可以把它想象成花哨的“shebang”——当您调用shell脚本时,内核实际执行的是“/bin/bash”(或其他)elf二进制文件,而不是脚本文件本身。内核不是“调用misc可执行文件”,它只是调用注册的解释器(这本身是“普通的”,通常是elf二进制文件)。可以把它想象成花哨的“shebang”——当您调用shell脚本时,内核实际执行的是“/bin/bash”(或其他)elf二进制文件,而不是脚本文件本身。
static struct linux_binfmt misc_format = {
.module = THIS_MODULE,
.load_binary = load_misc_binary,
};