binfmt_misc
binfmt_misc ( Miscellaneous Binary Format ) to funkcja jądra Linuksa , która umożliwia rozpoznawanie dowolnych formatów plików wykonywalnych i przekazywanie ich do określonych aplikacji przestrzeni użytkownika , takich jak emulatory i maszyny wirtualne . Jest to jedna z wielu procedur obsługi formatu binarnego w jądrze, które są zaangażowane w przygotowanie do uruchomienia programu w przestrzeni użytkownika.
Formaty plików wykonywalnych są rejestrowane przez interfejs systemu plików specjalnego przeznaczenia binfmt_misc
(zwykle montowany pod częścią /proc ). Można to zrobić bezpośrednio, wysyłając specjalne sekwencje do register
procfs lub używając opakowania, takiego jak dystrybucja oparta na Debianie pakiet binfmt-support lub systemd - binfmt.service
.
Rejestracja
Plik rejestru
zawiera wiersze definiujące obsługiwane typy plików wykonywalnych. Każda linia ma postać:
:nazwa:typ:przesunięcie:magia:maska:interpreter:flagi
-
name
to nazwa formatu binarnego. -
typ
toE
lubM
- Jeśli jest to
E
, format pliku wykonywalnego jest identyfikowany przez jego rozszerzenie nazwy pliku :magic
to rozszerzenie pliku, które ma być skojarzone z formatem binarnym;przesunięcie
imaska
są ignorowane. -
0
Jeśli jest toM
, format jest identyfikowany przezmagiczną
liczbę przy bezwzględnymprzesunięciu
(domyślnie ) w pliku, amaska
jest maską bitową (domyślnie wszystkie0x FF
) wskazującą, które bity w liczbie są znaczące.
- Jeśli jest to
-
interpreter
to program, który ma zostać uruchomiony z pasującym plikiem jako argumentem. -
flags
(opcjonalnie) to ciąg liter, z których każda kontroluje pewien aspekt wywołaniainterpretera
:-
P
, aby zachować oryginalną nazwę programu wpisaną przez użytkownika w wierszu poleceń — dodając tę nazwę doargv
; interpreter musi być tego świadomy, aby mógł poprawnie przekazać ten dodatkowy parametr do interpretowanego programu jako jegoargv
[0]
. -
O
, aby otworzyć plik programu i przekazać jego deskryptor pliku dointerpretera
, aby mógł odczytać plik, którego w inny sposób nie można odczytać (dla którego użytkownik nie ma uprawnień „Odczyt” ). -
C
, aby określić nowe poświadczenia procesu na podstawie pliku programu, a nie plikuinterpretera (zobacz
setuid ); oznacza flagęO.
-
F
, aby jądro otwierało plik binarny w czasie konfiguracji zamiast leniwie podczas uruchamiania, aby było dostępne również w innych przestrzeniach nazw montowania i chrootach.
-
Każdy format ma odpowiedni wpis pliku w katalogu /proc/sys/fs/binfmt_misc
, który można odczytać, aby uzyskać informacje o danym formacie pliku.
Wyrejestrowanie
$ echo -1 >/proc/sys/fs/binfmt_misc/status # wszystkie wpisy $ echo -1 >/proc/sys/fs/binfmt_misc/qemu-xtensa # pojedynczy wpis
Wspólne użycie
binfmt_misc umożliwia bezpośrednie przekazywanie programów Java do maszyny wirtualnej Java .
Innym powszechnym zastosowaniem jest uruchamianie plików wykonywalnych PE (skompilowanych dla MS-DOS lub Microsoft Windows ) za pośrednictwem Wine . Na przykład następujący wiersz uruchomi pliki DOS i Windows EXE (identyfikowane przez kod typu „MZ” ) przy użyciu Wine :
:DOSWin:M::MZ::/usr/bin/wine:
Aby uruchomić pliki EXE (.NET) z Mono : :CLR:M::MZ::/usr/bin/mono:
binfmt_misc można również łączyć z QEMU lub Box86 , aby wykonywać programy dla innych architektur procesorów, tak jakby były natywnymi plikami binarnymi.
binfmt_misc może być używany w Go jako język skryptowy.
Zobacz też
- ^ Obsługa jądra dla różnych formatów binarnych (binfmt_misc) Dokumentacja jądra Linuksa
- ^ Jak uruchamiane są programy , 28 stycznia 2015 r., David Drysdale, LWN.net
- ^ Szczegóły pakietu binfmt-support w sid , Debian
- ^ systemd-binfmt.service , freedesktop.org
- Bibliografia _ _
- ^ Obsługa jądra binarnego Java (tm) dla systemu Linux v1.03 Dokumentacja jądra systemu Linux
- ^ Mono(tm) Obsługa jądra binarnego dla Linuksa Dokumentacja jądra Linuksa
- ^ Przewodnik: Uruchamianie aplikacji mono
- ^ Oficjalne lustro QEMU , QEMU, 23 listopada 2022 r
- ^ Używanie Go jako języka skryptowego w systemie Linux , Cloudflare, 20.02.2018 , pobrane 05.05.2019
Linki zewnętrzne
- Strona główna projektu Zarchiwizowane na archive.org