Linux

/proc/sys/fs/binfmt_misc/ 下的文件允許哪些可執行格式?

  • April 23, 2018

我關注邁克爾的回复 ,看看我的 Ubuntu 可以辨識執行哪些可執行格式

$ ls -l /proc/sys/fs/binfmt_misc/
total 0
-rw-r--r-- 1 root root 0 Apr 19 16:11 cli
-rw-r--r-- 1 root root 0 Apr 19 16:11 jar
-rw-r--r-- 1 root root 0 Apr 19 16:11 python2.7
-rw-r--r-- 1 root root 0 Apr 19 16:11 python3.5
--w------- 1 root root 0 Apr 19 16:11 register
-rw-r--r-- 1 root root 0 Apr 19 16:11 status

我從來沒有故意改變任何東西,這些文件是預設創建的,或者是我安裝其他程序時創建的。

$ cat /proc/sys/fs/binfmt_misc/cli
enabled
interpreter /usr/lib/binfmt-support/run-detectors
flags: 
offset 0
magic 4d5a

這是什麼可執行格式?我搜尋了“magic 4d5a”並找到了https://en.wikipedia.org/wiki/DOS_MZ_executable,但我不確定該文件是如何在那裡創建的,因為它不是 Linux 的本機可執行格式。安裝wine添加了嗎?

$ cat /proc/sys/fs/binfmt_misc/jar
enabled
interpreter /usr/lib/jvm/java-9-oracle/lib/jexec
flags: 
offset 0
magic 504b0304

以上是JVM字節碼格式嗎?

$ cat /proc/sys/fs/binfmt_misc/python3.5 
enabled
interpreter /usr/bin/python3.5
flags: 
offset 0
magic 160d0d0a

以上是 Python 字節碼還是 Python?

$ cat /proc/sys/fs/binfmt_misc/status
enabled

$ cat /proc/sys/fs/binfmt_misc/register 
cat: /proc/sys/fs/binfmt_misc/register: Permission denied

/proc/sys/fs/binfmt_misc/register用來做什麼的?它是否也允許某些可執行格式?

ELF 格式需要一個文件/proc/sys/fs/binfmt_misc/嗎?

謝謝。

看看Mono 有多神奇?了解更多背景資訊。/proc/sys/fs/binfmt_misc是由管理的虛擬文件系統binfmt_misc(這就是文件都是 0 大小的原因)。

cli用於 Windows 和 .NET 執行檔(實際上是任何 MZ 執行檔,也用於 DOS 和 OS/2);它所指的檢測器確定給定的二進製文件應該使用 Wine 還是 Mono 執行。

jar為 Java 程序使用的 JAR 文件提供支持。因此,您可以製作一個 JAR 執行檔,並直接執行它(而不是使用java -jar ...)。

這些python文件提供對 Python 字節碼的支持。

status顯示binfmt_misc: 的整體狀態,在這種情況下,它已啟用。

register允許註冊新格式。這是通過將特定格式的字元串(有關詳細資訊,請參閱文件)回顯到register. 註冊的格式將顯示為一個新文件旁邊clijar和其他。

可以使用binfmt_misc. 它們可以使用文件副檔名(.jar等,儘管 JAR 文件由它們的“PK”簽名代替)或魔法值(“MZ”等)進行匹配,只要魔法值出現在前 128 個字節內。除了您列出的文件之外,通常以這種方式處理的其他格式是其他架構的二進製文件(由 QEMU 或 Hatari 等模擬器“解釋”),一些解釋的遊戲格式(love遊戲引擎在 Debian 下以這種方式註冊自己,位於至少)…

在 Debian 及其衍生版本中,軟體包使用binfmt-support和 中的文件註冊二進制格式/usr/share/binfmts/clidlocate -S /usr/share/binfmts/*會告訴你哪些包正在添加二進制格式。

ELF 不需要任何註冊,核心本身就支持它。

引用自:https://unix.stackexchange.com/questions/439569