리눅스는 (텍스트가 아닌) 바이너리를 실행하기 위해 어떤 기능을 사용할지를 어떻게 결정합니까? 수 있습니다 . 그리고

Linux는 shebang 라인을 사용하여 스크립팅 언어에 사용할 인터프리터를 결정하지만 바이너리에서는 어떻게 작동합니까?

Linux 바이너리를 실행할 수 있고 winemono , Windows 네이티브 및 .NET 바이너리를 모두 설치할 수 있습니다 . 그리고 그들 모두를 위해 그것을 ./binary-name실행하는 것은 단지 (PATH에 없다면)입니다.

Linux는 주어진 바이너리가 Linux 네이티브 바이너리, Windows 네이티브 바이너리 ( 와인 기능 사용) 또는 Windows .NET 바이너리 ( 단일 기능 사용) 로 실행되어야한다고 어떻게 판단 합니까?



답변

한마디로 : binfmt_misc . 리눅스 전용의 이식성이없는 시설입니다.

내장 로직으로 커널이 인식하는 몇 가지 형식이 있습니다. 즉, ELF 형식 (일반 바이너리의 경우)과 shebang 규칙 (스크립트의 경우)입니다. ( 답의 다음 부분에 대해 zwol 에게 감사드립니다 ). 또한 Linux는 난해하거나 오래되었거나 호환되지 않는 내장 형식을 인식합니다. 당신은 아마 그들을 만나지 않을 것입니다. 그들은이다 a.out“em86”, “평면”및 “elf_fdpic”.

다른 모든 것은 binfmt_misc 시스템을 통해 등록해야합니다. 이 시스템을 사용하면 마법 번호와 해당 인터프리터를 기반으로 간단한 패턴 검사를 커널에 등록 할 수 있습니다.


답변