binfmt_misc

binfmt_misc

binfmt_misc(기타 이진 형식)는 임의의 실행 파일 형식을 인식하여 에뮬레이터가상 [1]시스템 등의 특정 사용자 공간 애플리케이션에 전달할 수 있는 Linux 커널의 기능입니다.실행할 [2]사용자 공간 프로그램 준비에 관여하는 커널의 여러 바이너리 형식 핸들러 중 하나입니다.

실행 가능한 형식은 특수 목적 파일 시스템을 통해 등록됩니다. binfmt_misc파일 시스템인터페이스(통상은 /filename의 일부에 마운트 됩니다).이것은, 특별한 시퀀스를 직접 송신하는 것에 의해서 행해집니다.registerprocfs 파일 또는 Debian 기반 배포 binfmt-support[3] 패키지 또는 systemd와 같은 래퍼를 사용합니다.systemd-binfmt.service를 클릭합니다.[4][5]

등록.

register파일에는 처리할 실행 파일유형을 정의하는 행이 포함되어 있습니다.각 행은 다음 형식입니다.

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

  • name는 바이너리 형식의 이름입니다.
  • type어느 쪽인가E또는M
    • 그렇다면E실행 파일 형식은 파일 확장자로 식별됩니다.magic바이너리 포맷에 관련짓는 파일 확장자입니다.offset그리고.mask무시됩니다.
    • 그렇다면M포맷은 절대값에서 번호로 식별됩니다.offset(에 준함)0파일 및maskbitmask 입니다(모두에게 할당됩니다. 0xFF)는, 번호내의 어느 비트가 중요한지를 나타냅니다.
  • interpreter는 일치하는 파일을 인수로 실행하는 프로그램입니다.
  • flags(선택사항)은 문자열로, 각 문자는 특정 측면을 제어합니다.interpreter호출:
    • P사용자가 명령줄에 입력한 원래 프로그램 이름을 보존하려면 이 이름을 에 추가합니다. argv; 그interpreter이 점을 인식해야 합니다.그러면 이 추가 파라미터를 해석된 프로그램에 올바르게 전달할 수 있습니다.argv[0].
    • O프로그램 파일을 열고 파일 설명자를interpreter읽을 수 없는 파일을 읽을 수 있습니다(사용자에게 "읽기" 권한이 없음).
    • C프로그램 파일을 기반으로 새 프로세스 인증 정보를 결정하려면interpreter파일(setuid 참조).의미O플래그를 설정합니다.
    • F커널이 시작 시 느릿느릿한 시간이 아닌 구성 시 바이너리를 열도록 함으로써 다른 마운트 네임스페이스 및 chroot 내부에서도 사용할 수 있도록 합니다.

각 형식에는 대응하는 파일엔트리가 있습니다/proc/sys/fs/binfmt_misc특정 파일 형식에 대한 정보를 얻기 위해 읽을 수 있는 디렉토리입니다.

등록 해제

$ echo - 1 > / sys / fs / binfmt _ misc / status #모든 엔트리 $echo - 1 > / sys / fs / binfmt _ misc / qemu - xtensa #단일 엔트리

일반적인 사용법

binfmt_misc를 사용하면 Java 프로그램을 Java 가상 [6]머신에 직접 전달할 수 있습니다.

또 다른 일반적인 사용법은 Wine을 통해 PE 실행 파일(MS-DOS 또는 Microsoft Windows용으로 컴파일됨)을 실행하는 것입니다.예를 들어, 다음 행에서는 Wine을 사용하여 DOS 및 Windows EXE 파일("MZ" 유형 코드로 식별됨)을 실행합니다.

:DOSWin:M::MZ::/usr/bin/wine:

EXE(.)를 실행하려면NET) 파일([7][8]Mono): :CLR:M::MZ::/usr/bin/mono:

binfmt_misc는 QEMU 또는 Box86과 조합하여 [9]네이티브 바이너리인 것처럼 다른 프로세서아키텍처용 프로그램을 실행할 수도 있습니다.

스크립트 [10]언어로서 Go 에 binfmt_misc 를 사용할 수 있습니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ 기타 바이너리 포맷에 대한 커널 지원(binfmt_misc)Linux 커널 매뉴얼
  2. ^ 프로그램 운영 방법, 2015년 1월 28일, David Drysdale, LWN.net
  3. ^ 패키지 binfmt-support in sid, Debian 상세
  4. ^ systemd-binfmt.service, freedesktop.org
  5. ^ binfmt.d, freedesktop.org
  6. ^ Java(tm) Linux v1.03용 바이너리 커널 지원 Linux 커널 매뉴얼
  7. ^ Mono(tm) Linux용 바이너리 커널 지원 Linux 커널 매뉴얼
  8. ^ 가이드: 모노 어플리케이션 실행
  9. ^ Official QEMU mirror, QEMU
  10. ^ Using Go as a scripting language in Linux, Cloudflare, 2018-02-20, retrieved 2019-05-05

외부 링크