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 antingenE
ellerM
- 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
ochmask
ignoreras. -
0
Om det ärM
identifieras formatet av ettmagiskt
tal vid en absolutförskjutning
(standard till ) i filen ochmasken
är en bitmask (standard för alla0x FF
) som indikerar vilka bitar i numret som är signifikanta.
- Om det är
-
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 avtolkanrop
:-
P
för att bevara det ursprungliga programnamnet som skrivits av användaren på kommandoraden — genom att lägga till det namnet iargv
; tolken måste vara medveten om detta så att den korrekt kan skicka den extra parametern till det tolkade programmet som dessargv[0
]
. -
O
för att öppna programfilen och skicka dess filbeskrivning tilltolken
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 äntolkfil
(se setuid ); innebärO
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
- ^ Kärnstöd för diverse binära format (binfmt_misc) Dokumentationen för Linuxkärnan
- ^ How programs get run , 28 januari 2015, av David Drysdale, LWN.net
- ^ Detaljer om paketet binfmt-support i sid , Debian
- ^ systemd-binfmt.service , freedesktop.org
- ^ binfmt.d , freedesktop.org
- ^ Java(tm) Binär kärna stöd för Linux v1.03 Linux-kärnan dokumentation
- ^ Mono(tm) Binär kärna stöd för Linux Linux-kärnan dokumentation
- ^ Guide: Att köra monoapplikationer
- ^ Officiell QEMU-spegel , QEMU, 23 november 2022
- ^ Använda Go som skriptspråk i Linux , Cloudflare, 2018-02-20 , hämtad 2019-05-05
externa länkar
- Projektets hemsida Arkiverad på archive.org