Tim*_*Tim 4 linux ubuntu executable binfmt
我按照迈克尔的回复 来查看我的 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
Run Code Online (Sandbox Code Playgroud)
我从来没有故意改变那里的任何东西,这些文件是默认创建的,或者是在我安装其他一些程序时创建的。
$ cat /proc/sys/fs/binfmt_misc/cli
enabled
interpreter /usr/lib/binfmt-support/run-detectors
flags:
offset 0
magic 4d5a
Run Code Online (Sandbox Code Playgroud)
这是一种什么样的可执行格式?我在 google 上搜索了“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
Run Code Online (Sandbox Code Playgroud)
以上是JVM字节码格式吗?
$ cat /proc/sys/fs/binfmt_misc/python3.5
enabled
interpreter /usr/bin/python3.5
flags:
offset 0
magic 160d0d0a
Run Code Online (Sandbox Code Playgroud)
以上是 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
Run Code Online (Sandbox Code Playgroud)
是什么/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。注册的格式将显示为一个新文件cli,jar以及其他文件。
可以使用binfmt_misc. 它们可以使用文件扩展名(.jar等,尽管 JAR 文件由它们的“PK”签名标识)或幻值(“MZ”等)进行匹配,只要幻值出现在前 128 个字节内。除了您列出的文件之外,通常以这种方式处理的其他格式是其他体系结构的二进制文件(由 QEMU“解释”,或像 Hatari 这样的模拟器),一些解释的游戏格式(love游戏引擎在 Debian 下以这种方式注册自己至少)...
在 Debian 和衍生产品下,软件包使用binfmt-support和 中的文件注册二进制格式/usr/share/binfmts/cli;dlocate -S /usr/share/binfmts/*会告诉你哪些包正在添加二进制格式。
ELF 不需要任何注册,内核本身就支持它。