Linux는 shebang 라인을 사용하여 스크립팅 언어에 사용할 인터프리터를 결정하지만 바이너리에서는 어떻게 작동합니까?
Linux 바이너리를 실행할 수 있고 wine 및 mono , Windows 네이티브 및 .NET 바이너리를 모두 설치할 수 있습니다 . 그리고 그들 모두를 위해 그것을 ./binary-name
실행하는 것은 단지 (PATH에 없다면)입니다.
Linux는 주어진 바이너리가 Linux 네이티브 바이너리, Windows 네이티브 바이너리 ( 와인 기능 사용) 또는 Windows .NET 바이너리 ( 단일 기능 사용) 로 실행되어야한다고 어떻게 판단 합니까?
답변
한마디로 : binfmt_misc . 리눅스 전용의 이식성이없는 시설입니다.
내장 로직으로 커널이 인식하는 몇 가지 형식이 있습니다. 즉, ELF 형식 (일반 바이너리의 경우)과 shebang 규칙 (스크립트의 경우)입니다. ( 답의 다음 부분에 대해 zwol 에게 감사드립니다 ). 또한 Linux는 난해하거나 오래되었거나 호환되지 않는 내장 형식을 인식합니다. 당신은 아마 그들을 만나지 않을 것입니다. 그들은이다 a.out
“em86”, “평면”및 “elf_fdpic”.
다른 모든 것은 binfmt_misc 시스템을 통해 등록해야합니다. 이 시스템을 사용하면 마법 번호와 해당 인터프리터를 기반으로 간단한 패턴 검사를 커널에 등록 할 수 있습니다.