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=
(幫助)