Que tipos de formatos executáveis fazem os arquivos em / proc / sys / fs / binfmt_misc / allow?

2

Eu sigo a resposta de Michael para ver que formatos executáveis meu Ubuntu pode reconhecer para executar

$ ls -l /proc/sys/fs/binfmt_misc/
total 0
-rw-r--r-- 1 root root 0 Apr 19 16:11 cli
-rw-r--r-- 1 root root 0 Apr 19 16:11 jar
-rw-r--r-- 1 root root 0 Apr 19 16:11 python2.7
-rw-r--r-- 1 root root 0 Apr 19 16:11 python3.5
--w------- 1 root root 0 Apr 19 16:11 register
-rw-r--r-- 1 root root 0 Apr 19 16:11 status

Eu nunca mudei intencionalmente nada lá, e os arquivos foram criados por padrão ou quando eu instalei alguns outros programas.

$ cat /proc/sys/fs/binfmt_misc/cli
enabled
interpreter /usr/lib/binfmt-support/run-detectors
flags: 
offset 0
magic 4d5a

Que tipo de formato executável é esse? Eu pesquisei "magic 4d5a" e encontrei o link , mas não tenho certeza de como o arquivo foi criado lá, pois não é um formato executável nativo para o Linux. A instalação de wine adicionou?

$ cat /proc/sys/fs/binfmt_misc/jar
enabled
interpreter /usr/lib/jvm/java-9-oracle/lib/jexec
flags: 
offset 0
magic 504b0304

O formato de bytecode da JVM é o acima?

$ cat /proc/sys/fs/binfmt_misc/python3.5 
enabled
interpreter /usr/bin/python3.5
flags: 
offset 0
magic 160d0d0a

O código acima é para bytecode Python ou Python?

$ cat /proc/sys/fs/binfmt_misc/status
enabled

$ cat /proc/sys/fs/binfmt_misc/register 
cat: /proc/sys/fs/binfmt_misc/register: Permission denied

Para que /proc/sys/fs/binfmt_misc/register é usado? Também permite algum formato executável?

O formato ELF precisa de um arquivo em /proc/sys/fs/binfmt_misc/ ?

Obrigado.

    
por Tim 23.04.2018 / 21:14

1 resposta

3

Veja Como o Mono é mágico? para mais informações. /proc/sys/fs/binfmt_misc é um sistema de arquivos virtual gerenciado por binfmt_misc (é por isso que os arquivos são todos de tamanho 0).

cli é usado para executáveis Windows e .NET (e realmente qualquer executável MZ, como também usado em DOS e OS / 2); o detector a que se refere determina se um determinado binário deve ser executado usando Wine ou Mono.

jar fornece suporte para arquivos JAR, conforme usado por programas Java. Assim, você pode criar um executável JAR e executá-lo diretamente (em vez de usar java -jar ... ).

Os arquivos python fornecem suporte para o código de bytes do Python.

status mostra o status geral de binfmt_misc : nesse caso, ele está ativado.

register permite que novos formatos sejam registrados. Isso é feito fazendo-se eco de uma string em um formato específico (consulte a documentação para detalhes) para register . O formato registrado aparecerá como um novo arquivo ao lado de cli , jar e os outros.

Muitos tipos de formatos executáveis podem ser registrados usando binfmt_misc . Eles podem ser correspondidos usando uma extensão de arquivo ( .jar etc., embora arquivos JAR sejam identificados pela assinatura "PK") ou um valor mágico ("MZ" etc.), desde que o valor mágico ocorra dentro do primeiro 128 bytes. Além dos arquivos que você listou, outros formatos normalmente tratados dessa forma são binários para outras arquiteturas (“interpretados” pelo QEMU, ou emuladores como o Hatari), alguns formatos de jogos interpretados (o mecanismo love game se registra dessa maneira sob pelo menos o Debian) ...

Sob o Debian e derivados, os pacotes registram formatos binários usando binfmt-support e arquivos em /usr/share/binfmts/cli ; dlocate -S /usr/share/binfmts/* dirá quais pacotes estão adicionando formatos binários.

O ELF não precisa de registro, é suportado nativamente pelo kernel.

    
por 23.04.2018 / 22:09