O que é o ELF Magic?


26

Eu já vi discussões antes sobre a magia ELF, mais recentemente os comentários nesta questão de troca de pilhas de segurança . Já vi isso mencionado antes e nos meus próprios logs de inicialização. Mas não tenho certeza do que é.

A página de manual no elf está um pouco acima da minha cabeça, pois eu não faço idiomas C ou de nível inferior.

Como alguém que usa o Linux como um sistema operacional diário, o que é ELF?



13
O título é mais adequado para troca de pilha de rpg.
Cthulhu

Respostas:


37

Desde a página de manual que você faz referência:

elf - format of Executable and Linking Format (ELF) files

O ELF define o formato binário de arquivos executáveis ​​usados ​​pelo Linux. Quando você invoca um executável, o sistema operacional deve saber como carregar o executável na memória corretamente, como resolver dependências dinâmicas da biblioteca e, em seguida, onde pular para o executável carregado para começar a executá-lo. O formato ELF fornece essas informações. A mágica ELF é usada para identificar arquivos ELF e são apenas os primeiros bytes de um arquivo:

% od -c -N 16 /bin/ls
0000000 177   E   L   F 002 001 001  \0  \0  \0  \0  \0  \0  \0  \0  \0
0000020

ou

% readelf -h /bin/ls | grep Magic
  Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 

Esses 16 bytes identificam inequivocamente um arquivo como um executável ELF. Muitos formatos de arquivo possuem bytes "mágicos" que realizam a mesma tarefa - identificando um tipo de arquivo.


8
A mágica real é apenas os quatro primeiros bytes. Os campos a seguir descrevem endianness, arquitetura da CPU e várias outras coisas.
Simon Richter

@SimonRichter que se resume à semântica. Os primeiros 4 bytes são mágicos para a identificação genérica de muitos tipos de arquivos, mas o solicitante especificou "ELF magic", que readelfreconhece até 16 bytes.
casey

2
Se você quer ser realmente técnico, os 16 primeiros bytes são a "identificação" ( e_ident), dos quais os 4 primeiros bytes são o número mágico ( EI_MAG0através EI_MAG3)
Michael Mrozek

1
@slebetman Meu uso de "magic" vem da especificação ELF: "Os primeiros 4 bytes de um arquivo contêm um 'número mágico', identificando o arquivo como um arquivo de objeto ELF"
Michael Mrozek

2
"Sem ambiguidade" está exagerando um pouco. A menos que você saiba de onde o arquivo veio, tudo é apenas um palpite. Um arquivo /bin, com certeza, é quase certamente um binário ELF. Algum arquivo aleatório que você baixou ... não há como dizer.
cHao

11

"Números mágicos" é o nome dado a seqüências constantes de bytes (geralmente) no início dos arquivos, usadas para marcar esses arquivos como tendo um formato de arquivo específico. Eles servem a um propósito semelhante às extensões de arquivo.

Consulte a entrada do arquivo de jargão para obter mais informações.

Por exemplo, as imagens PNG sempre começam com os mesmos oito bytes: 137 80 78 71 13 10 26 10

Portanto, os números mágicos ELF são os bytes no início dos arquivos elf que os identificam como tal.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.