binfmt_misc
binfmt_misc是Linux内核的一项功能,其使得内核可识别任意类型的可执行文件格式并传递至特定的用户空间应用程序,如模拟器和虚拟机[1]。它是内核中准备用户空间程序运行的诸多二进制格式文件处理程序之一 [2].。
可执行文件格式透过特殊文件系统binfmt_misc
接口注册(通常挂载在/proc)。注册流程既可通过向名为register
的procfs文件发送特殊序列,也可经由封装器(如基于Debian发行版的binfmt-support包)[3]亦或是systemd的systemd-binfmt.service
服务进行[4][5]。
注册流程
register
文件中包含可执行文件该如何被处理的定义。其格式如下所示:
:name:type:offset:magic:mask:interpreter:flags
name
为二进制格式的名称。type
应为E
或M
类型interpreter
是将匹配文件作为参数运行的程序(解释器)。flags
(可选)是一系列的字符串,每个控制着interpreter
调用的特定方面:
每个文件格式在/proc/sys/fs/binfmt_misc
目录中都有相应的文件定义项,用户可在其中获取特定文件格式的信息。
常见用法
binfmt_misc可使Java程序直接传递至Java虚拟机。[6]
除此之外,用户也可通过Wine直接执行可移植可执行文件(为MS-DOS或Microsoft Windows编译)。举个例子,下列配置将使用Wine运行DOS和Windows EXE文件(根据“MZ”类型代码识别):
:DOSWin:M::MZ::/usr/bin/wine:
要使用Mono运行EXE(.NET)文件:[7][8]
:CLR:M::MZ::/usr/bin/mono:
另外,用户可通过此功能运行为其他架构打造的二进制码(需要QEMU)。若二进制码通过binfmt_misc注册,则其可像原生二进制库一样被执行[9]。
另请参阅
参考文献
- ^ 存档副本. [2019-05-01]. (原始内容存档于2019-05-01).
- ^ 存档副本. [2019-05-01]. (原始内容存档于2019-05-01).
- ^ 存档副本. [2019-05-01]. (原始内容存档于2019-05-01).
- ^ 存档副本. [2019-05-01]. (原始内容存档于2019-05-01).
- ^ 存档副本. [2019-05-01]. (原始内容存档于2019-05-01).
- ^ 存档副本. [2019-05-01]. (原始内容存档于2019-05-01).
- ^ 存档副本. [2019-05-01]. (原始内容存档于2019-05-01).
- ^ Guide:Running Mono Applications. [2019-05-01]. (原始内容存档于2019-06-12).
- ^ Official QEMU mirror. Please see http://wiki.qemu.org/Contribute/SubmitAPatch for how to submit changes to QEMU. Pull Requests are ignored. Please only use release tarballs from the QEMU website. -.., QEMU, 2019-01-26 [2019-01-27], (原始内容存档于2019-03-27) 外部链接存在于
|title=
(帮助)