binfmt_misc

Source: Wikipedia, the free encyclopedia.

binfmt_misc (Miscellaneous Binary Format) is a capability of the

user space applications, such as emulators and virtual machines.[1] It is one of a number of binary format handlers in the kernel that are involved in preparing a user-space program to run.[2]

The executable formats are registered through the

/proc). This is either done directly by sending special sequences to the register procfs file or using a wrapper like Debian-based distributions binfmt-support package[3] or systemd's systemd-binfmt.service.[4][5]

Registration

The register file contains lines which define executable types to be handled. Each line is of the form:

:name:type:offset:magic:mask:interpreter:flags

Each format has a corresponding file entry in the /proc/sys/fs/binfmt_misc directory which can be read to get information about a given file format.

Deregistration

$ echo -1 >/proc/sys/fs/binfmt_misc/status # all entries
$ echo -1 >/proc/sys/fs/binfmt_misc/qemu-xtensa # single entry

Common usage

  • binfmt_misc allows Java programs to be passed directly to the Java virtual machine.[6]
  • binfmt_misc allows identification of
    PE executables
    using the magic number "MZ". Examples:
    • :DOSWin:M::MZ::/usr/bin/wine: will hand all such files to Wine (thus assuming they are ordinary MS-DOS or Microsoft Windows executable)
    • :CLR:M::MZ::/usr/bin/mono: will hand such files to Mono (thus assuming they are .NET executables)[7][8]
    • Microsoft's WSL1 use binfmt to allow for calling Windows programs from Linux. The line is equivalent to :WSLInterOP:M::MZ::/init:P.
  • binfmt_misc can also be combined with QEMU or Box86 to execute programs for other processor architectures as if they were native binaries.[9]
  • binfmt can be used to turn some compiled languages such as Go into scripting languages, acting as a substitute for the
    shebang line.[10]

See also

References

  1. ^ Kernel Support for miscellaneous Binary Formats (binfmt_misc) The Linux Kernel documentation
  2. ^ How programs get run, January 28, 2015, by David Drysdale, LWN.net
  3. ^ Details of package binfmt-support in sid, Debian
  4. ^ systemd-binfmt.service, freedesktop.org
  5. ^ binfmt.d, freedesktop.org
  6. ^ Java(tm) Binary Kernel Support for Linux v1.03 The Linux Kernel documentation
  7. ^ Mono(tm) Binary Kernel Support for Linux The Linux Kernel documentation
  8. ^ Guide:Running Mono Applications
  9. ^ Official QEMU mirror, QEMU, 23 November 2022
  10. ^ Using Go as a scripting language in Linux, Cloudflare, 2018-02-20, retrieved 2019-05-05

External links