Como o Linux determina quais recursos usar para executar um binário (não textual)?

23

Eu entendo que o Linux usa a linha shebang para determinar qual interpretador usar para linguagens de script, mas como ele funciona para binários?

Quero dizer, posso executar binários do Linux e ter instalado wine e mono , binários nativos do Windows e .NET. E para todos eles é apenas ./binary-name (se não em PATH) para executá-lo.

Como o Linux determina que um determinado binário deve ser executado como um binário nativo do Linux, como um binário nativo do Windows (usando wine instalações) ou como um binário do Windows .NET (usando mono instalações)?

    
por golem 26.04.2015 / 19:49

1 resposta

29

Em uma palavra: binfmt_misc . É uma instalação específica do Linux, não portátil.

Existem alguns formatos que são reconhecidos pelo kernel com lógica interna. Nomeadamente, estes são o formato ELF (para binários normais) e a convenção shebang (para scripts). (graças a zwol para a parte seguinte da resposta). Além disso, o Linux reconhece alguns formatos esotéricos ou obsoletos ou de compatibilidade. Você provavelmente não vai encontrá-los. Eles são a.out , "em86", "flat" e "elf_fdpic".

Todo o resto deve ser registrado através do sistema binfmt_misc. Este sistema permite que você registre com o kernel uma verificação de padrão simples baseada em um número mágico e o interpretador correspondente.

    
por 26.04.2015 / 19:55