binfmt_misc

binfmt_misc ( Miscellaneous Binary Format ) är en funktion hos Linux-kärnan som gör att godtyckliga körbara filformat kan identifieras och skickas till vissa användarutrymmesapplikationer , såsom emulatorer och virtuella maskiner . Det är en av ett antal binära formathanterare i kärnan som är involverade i att förbereda ett användarutrymmesprogram för att köras.

De körbara formaten registreras via filsystemet binfmt_misc filsystemgränssnitt för särskilda ändamål (vanligtvis monterat under en del av /proc ). Detta görs antingen direkt genom att skicka speciella sekvenser till register procfs-filen eller genom att använda ett omslag som Debian -baserade distributioner binfmt-supportpaket eller systemds systemd -binfmt.service .

Registrering

Registerfilen innehåller rader som definierar exekverbara typer som ska hanteras . Varje rad har formen:

:namn:typ:offset:magic:mask:tolk:flaggor

  • namn är namnet på det binära formatet.
  • typ är antingen E eller M
    • Om det är E , identifieras det körbara filformatet av dess filnamnstillägg : magic är filtillägget som ska associeras med det binära formatet; offset och mask ignoreras.
    • 0 Om det är M identifieras formatet av ett magiskt tal vid en absolut förskjutning (standard till ) i filen och masken är en bitmask (standard för alla 0x FF ) som indikerar vilka bitar i numret som är signifikanta.
  • tolk är ett program som ska köras med den matchande filen som argument.
  • flaggor (valfritt) är en sträng av bokstäver som var och en kontrollerar en viss aspekt av tolkanrop :
    • P för att bevara det ursprungliga programnamnet som skrivits av användaren på kommandoraden — genom att lägga till det namnet i argv ; tolken måste vara medveten om detta så att den korrekt kan skicka den extra parametern till det tolkade programmet som dess argv[0 ] .
    • O för att öppna programfilen och skicka dess filbeskrivning till tolken så att den kan läsa en annars oläsbar fil (som användaren inte har "Läs" -behörighet för ).
    • C för att fastställa nya processuppgifter baserat på programfil snarare än tolkfil (se setuid ); innebär O flagga.
    • F för att få kärnan att öppna binären vid konfigurationstillfället istället för lat vid starttidpunkten, så att den också är tillgänglig i andra monteringsnamnrymder och chroots.

Varje format har en motsvarande filpost i katalogen /proc/sys/fs/binfmt_misc som kan läsas för att få information om ett givet filformat.

Avregistrering


 $  echo  -1 >/proc/sys/fs/binfmt_misc/status  # alla poster  $  echo  -1 >/proc/sys/fs/binfmt_misc/qemu-xtensa  # engångspost 

Vanligt bruk

binfmt_misc tillåter att Java- program skickas direkt till den virtuella Java-maskinen .

En annan vanlig användning är att köra PE-körbara filer (kompilerade för MS-DOS eller Microsoft Windows ) via Wine . Till exempel kommer följande rad att köra DOS- och Windows EXE -filer (identifierade med "MZ" -typkoden ) med Wine :

:DOSWin:M::MZ::/usr/bin/vin:

För att köra EXE (.NET)-filer med Mono : :CLR:M::MZ::/usr/bin/mono:

binfmt_misc kan också kombineras med QEMU eller Box86 för att exekvera program för andra processorarkitekturer som om de vore inbyggda binärer.

binfmt_misc kan användas för Go som ett skriptspråk.

Se även

  1. ^ Kärnstöd för diverse binära format (binfmt_misc) Dokumentationen för Linuxkärnan
  2. ^ How programs get run , 28 januari 2015, av David Drysdale, LWN.net
  3. ^ Detaljer om paketet binfmt-support i sid , Debian
  4. ^ systemd-binfmt.service , freedesktop.org
  5. ^ binfmt.d , freedesktop.org
  6. ^ Java(tm) Binär kärna stöd för Linux v1.03 Linux-kärnan dokumentation
  7. ^ Mono(tm) Binär kärna stöd för Linux Linux-kärnan dokumentation
  8. ^ Guide: Att köra monoapplikationer
  9. ^ Officiell QEMU-spegel , QEMU, 23 november 2022
  10. ^ Använda Go som skriptspråk i Linux , Cloudflare, 2018-02-20 , hämtad 2019-05-05

externa länkar