Articulo de referencia

binfmt_misc

binfmt_misc ( Miscellaneous Binary Format ) es una capacidad del kernel de Linux que permite reconocer formatos de archivos ejecutables arbitrarios y pasarlos a ciertas aplicaci...

binfmt_misc ( Miscellaneous Binary Format ) es una capacidad del kernel de Linux que permite reconocer formatos de archivos ejecutables arbitrarios y pasarlos a ciertas aplicaciones de espacio de usuario , como emuladores y máquinas virtuales . [ 1 ] Es uno de los varios manejadores de formato binario del kernel que participan en la preparación de un programa de espacio de usuario para su ejecución. [ 2 ]

Los formatos ejecutables se registran a través de la interfaz del sistema de archivos de propósito especial (generalmente montada en una parte de /proc ). Esto se hace enviando secuencias especiales al archivo procfs o usando un envoltorio como el paquete binfmt-support de las distribuciones basadas en Debian [ 3 ] o systemd [ 4 ] [ 5 ] .binfmt_miscregistersystemd-binfmt.service

Registro

Según la documentación del kernel, se puede agregar un tipo de archivo ejecutable escribiendo una línea en el registerarchivo, con el siguiente formato:

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

  • namees el nombre del formato binario.
  • typees EoM
    • Si es así E, el formato del archivo ejecutable se identifica por su extensión de nombre de archivo : magices la extensión de archivo que se asociará con el formato binario; offsety maskse ignoran.
    • Si es así M, el formato se identifica mediante magicun número en una posición absoluta offset(por defecto es 0) en el archivo y maskes una máscara de bits (por defecto son todos 0xFF) que indica qué bits del número son significativos.
  • interpreterEs un programa que debe ejecutarse con el archivo correspondiente como argumento.
  • flags(opcional) es una cadena de letras, cada una de las cuales controla un aspecto determinado de interpreterla invocación:
    • Ppara preservar el nombre del programa original escrito por el usuario en la línea de comandos, agregando ese nombre a argv; el interpreterdebe ser consciente de esto para poder pasar correctamente ese parámetro adicional al programa interpretado como su argv[0].
    • Opara abrir el archivo del programa y pasar su descriptor de archivo para interpreterque pueda leer un archivo que de otro modo sería ilegible (para el cual el usuario no tiene el permiso de "Lectura" ).
    • Cpara determinar las nuevas credenciales del proceso basándose en el archivo del programa en lugar interpreterdel archivo (ver setuid ); implica Obandera.
    • Fpara que el kernel abra el binario en el momento de la configuración en lugar de hacerlo de forma diferida al inicio, de modo que esté disponible también dentro de otros espacios de nombres de montaje y chroots.

Cada formato tiene una entrada de archivo correspondiente en el /proc/sys/fs/binfmt_miscdirectorio, que se puede leer para obtener información sobre un formato de archivo determinado, o escribir para deshabilitarlo, habilitarlo o anular su registro.

Cancelación del registro

$ echo -1 >/proc/sys/fs/binfmt_misc/status # todas las entradas $ echo -1 >/proc/sys/fs/binfmt_misc/qemu-xtensa # entrada única

Uso común

  • binfmt_misc permite que los programas Java se pasen directamente a la máquina virtual Java . [ 6 ]
  • binfmt_misc permite la identificación de ejecutables PE mediante el número mágico "MZ". Ejemplos:
    • :DOSWin:M::MZ::/usr/bin/wine:Wine le entregará todos esos archivos (suponiendo que sean ejecutables comunes de MS-DOS o Microsoft Windows ).
    • :CLR:M::MZ::/usr/bin/mono:entregará dichos archivos a Mono (suponiendo que sean ejecutables .NET ) [ 7 ] [ 8 ]
    • WSL1 de Microsoft utiliza binfmt para permitir la llamada a programas de Windows desde Linux. La línea es equivalente a :WSLInterOP:M::MZ::/init:P.
  • binfmt_misc también se puede combinar con la emulación en modo usuario de QEMU o Box86 para ejecutar programas para otras arquitecturas de procesador como si fueran binarios nativos. [ 9 ]
  • binfmt se puede utilizar para convertir algunos lenguajes compilados como Go en lenguajes de scripting, actuando como sustituto de la línea shebang . [ 10 ]
  • binfmt_misc se puede usar en NixOS para ejecutar archivos AppImage con un intérprete. [ 11 ]

Referencias

  1. Compatibilidad del kernel con formatos binarios diversos (binfmt_misc) Documentación del kernel de Linux
  2. Cómo se ejecutan los programas , 28 de enero de 2015, por David Drysdale, LWN.net
  3. Detalles del paquete binfmt-support en sid , Debian
  4. systemd-binfmt.service , freedesktop.org
  5. binfmt.d , freedesktop.org
  6. Compatibilidad del núcleo binario de Java para Linux v1.03 Documentación del núcleo de Linux
  7. Soporte del núcleo binario Mono para Linux Documentación del núcleo Linux
  8. Guía: Ejecución de aplicaciones Mono
  9. Espejo oficial de QEMU , QEMU, 23 de noviembre de 2022
  10. Uso de Go como lenguaje de scripting en Linux , Cloudflare, 2018-02-20 , consultado el 2019-05-05
  11. ^ "Imagen de aplicación - Wiki de NixOS" . nixos.wiki . Consultado el 27 de noviembre de 2025 .
  • Página principal del proyecto. Archivado en archive.org.