我知道 Linux 使用 shebang 行来确定用于脚本语言的解释器,但它如何用于二进制文件?
我的意思是我可以运行 Linux 二进制文件,并且已经安装了两者葡萄酒和单核细胞增多症、Windows 本机和 .NET 二进制文件。对于所有这些,只需./binary-name
运行它(如果不在路径中)。
Linux 如何确定给定的二进制文件必须作为 Linux 本机二进制文件、Windows 本机二进制文件运行(使用葡萄酒设施)或作为 Windows .NET 二进制文件(使用单核细胞增多症设施)?
答案1
一句话:binfmt_misc。它是 Linux 特定的、不可移植的工具。
有几种格式可以被内核通过内置逻辑识别。即,这些是 ELF 格式(对于普通二进制文件)和 shebang 约定(对于脚本)。 (谢谢兹沃尔答案的以下部分)。此外,Linux 还可以识别一些深奥的、过时的或兼容的内置格式。你可能不会遇到他们。它们是a.out
、“em86”、“flat”和“elf_fdpic”。
其他所有内容都必须通过 binfmt_misc 系统注册。该系统允许您向内核注册基于幻数的简单模式检查以及相应的解释器。