Posts O Formato ELF (Executable and Linking Format)
Post
Cancel

O Formato ELF (Executable and Linking Format)

ELF é o formato de arquivos binários do Linux. É um padrão que define a estrutura que os arquivos binários devem seguir para que o sistema operacional consiga interpretar o seu conteúdo. Um arquivo ELF pode ser de vários tipos (executável, objetos relocáveis, bibliotecas compartilhadas, e dumps) e por isso possui um local específico dentro dele para definir qual é o tipo do arquivo que está sendo lido. O sistema operacional sabe como tratar o arquivo com base no tipo definido nesse campo.

Arquitetura


Outra informação importante que o cabeçalho de um arquivo ELF carrega é a arquitetura para a qual o binário foi compilado (32 ou 64 bits). No cabeçalho do arquivo existe um campo chamado Class onde essa informação está registrada. Podemos usar o comando readelf para ler o conteúdo do cabeçalho de um binário. A nível de exemplo eu compilei um código simples para as duas plataformas e, com o comando readelf apresento abaixo o resultado:

ELF 64 bits ELF 32 bits

Sessões


Sessões são locais reservados dentro dum arquivo ELF com objetivos predefinidos. Além de objetivos diferentes, as sessões têm permissões diferentes. Por exemplo, um programador criou em seu código uma variável “nome” que irá receber o nome do usuário. Obviamente esse espaço do ELF precisará de permissão de escrita afinal de contas o programa não inicia já contendo o nome do usuário nesse local – ele será preenchido depois que o programa já estiver em execução e o usuário digitar o próprio nome.

Já outras informações já vêm preenchidas quando o programa inicia e, enquanto está criando o programa, o desenvolvedor define que essas informações não poderão ser alteradas – por isso elas não são chamadas de variáveis, mas sim de constantes. Tendo em vista que essa parte do ELF não vai sofrer alterações durante a execução do programa, ela não vai precisar de permissão de escrita, apenas de leitura. E assim nasce as permissões!

Com certeza esse assunto de permissões nos levam para outras considerações mais interessantes. Mas deixarei para uma próxima.

Em um ELF as sessões mais comuns são:

.data.rodata.bss.got.plt
Dados inicializados com permissão de Leitura e escrita.Dados inicializados com permissão de apenas leitura.Dados NÃO inicializados com permissão de leitura e escrita.Uma tabela contendo os endereços de memória das funções.Aponta nomes de funções para as entradas na .got
This post is licensed under CC BY 4.0 by the author.