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 to E lub M
    • 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 i maska ​​są ignorowane.
    • 0 Jeśli jest to M , format jest identyfikowany przez magiczną liczbę przy bezwzględnym przesunięciu (domyślnie ) w pliku, a maska ​​​​jest maską bitową (domyślnie wszystkie 0x FF ) wskazującą, które bity w liczbie są znaczące.
  • 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łania interpretera :
    • P , aby zachować oryginalną nazwę programu wpisaną przez użytkownika w wierszu poleceń — dodając tę ​​nazwę do argv ; interpreter musi być tego świadomy, aby mógł poprawnie przekazać ten dodatkowy parametr do interpretowanego programu jako jego argv [0] .
    • O , aby otworzyć plik programu i przekazać jego deskryptor pliku do interpretera , 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 pliku interpretera (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ż

  1. ^ Obsługa jądra dla różnych formatów binarnych (binfmt_misc) Dokumentacja jądra Linuksa
  2. ^ Jak uruchamiane są programy , 28 stycznia 2015 r., David Drysdale, LWN.net
  3. ^ Szczegóły pakietu binfmt-support w sid , Debian
  4. ^ systemd-binfmt.service , freedesktop.org
  5. Bibliografia _ _
  6. ^ Obsługa jądra binarnego Java (tm) dla systemu Linux v1.03 Dokumentacja jądra systemu Linux
  7. ^ Mono(tm) Obsługa jądra binarnego dla Linuksa Dokumentacja jądra Linuksa
  8. ^ Przewodnik: Uruchamianie aplikacji mono
  9. ^ Oficjalne lustro QEMU , QEMU, 23 listopada 2022 r
  10. ^ Używanie Go jako języka skryptowego w systemie Linux , Cloudflare, 20.02.2018 , pobrane 05.05.2019

Linki zewnętrzne