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?

Mitch
fonte
3
Em relação à mágica, veja também o comando de arquivo do Linux que classifica os arquivos
Gilles 'SO- stop be evil'
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.

Casey
fonte
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.

legolasss
fonte