Formato executável e vinculável
| DUENDE | ||
|---|---|---|
|
Camada de um arquivo ELF | ||
| desenvolvedor | ||
| Laboratórios do Sistema Unix | ||
| Informações gerais | ||
| extensão de arquivo |
none, .axf, .bin, .o, .so, .elf, .prx, .puff, .ko, .mod | |
| número mágico |
0x7F 'E' 'L' 'F' | |
| tipo de formato | Binário , executável , objeto , biblioteca compartilhada , core dump | |
| conteúdo por | Alguns formatos executáveis binários | |
| formato aberto | ? | |
Na computação , o Extensible Linkable Format ( ELF , anteriormente chamado Extensible Linking Format ), é um formato de arquivo padrão comum para arquivos executáveis , código objeto , bibliotecas compartilhadas e despejos de núcleo . Publicado pela primeira vez na especificação da Application Binary Interface (ABI) da versão do sistema operacional Unix chamado System V Release 4 (SVR4), e posteriormente no Tool Interface Standard, foi rapidamente aceito entre diferentes fornecedores de sistemas . Em 1999, foi escolhido como o formato de arquivo binário padrão para sistemas Unix e semelhantes a Unix em processadores x86 pelo projeto 86open .
Por design, o formato ELF é flexível, extensível e multiplataforma . Por exemplo, ele suporta diferentes tamanhos de endian e endereço, portanto, não exclui nenhuma unidade de processamento central (CPU) ou arquitetura de conjunto de instruções . Isso permitiu que ele fosse adotado por muitos sistemas operacionais diferentes em muitas plataformas de hardware diferentes .
—Exemplo de despejo hexadecimal de um cabeçalho de arquivo ELF [ 1 ]
|
Estrutura
Dentro do formato ELF podemos distinguir várias partes. [ 2 ]
Primeiro o cabeçalho ELF, que contém informações gerais sobre o executável. Indica as posições das tabelas de cabeçalho de seção e cabeçalho de programa.
Cada um desses cabeçalhos indica onde os dados de cada uma das seções estão localizados. Os cabeçalhos do programa definem as regiões ou bibliotecas executáveis que precisam ser carregadas para criar a imagem do processo e iniciar sua execução. Os cabeçalhos das seções contêm informações importantes para vinculação e realocação.
As seções têm nomes que geralmente são os mesmos em todos os sistemas. Exemplos de seções são:
.data Contém dados do programa inicializado.
.debug Contém informações para auxiliar na depuração .
.ctors Contém ponteiros para construtores C++.
.dtors Contém ponteiros para destruidores C++.
.dynamic Contém informações relevantes para vinculação dinâmica.
.dynsym Contém a tabela de símbolos para vinculação dinâmica.
.fini Contém o código de conclusão do programa.
.init Contém o código de inicialização do programa.
.shstrtab Contém uma tabela de strings com os nomes das seções.
.strtab Contém uma tabela de strings normalmente usada para nomear os elementos da tabela de símbolos.
.symtab Contém uma tabela de símbolos.
.text Contém a parte executável de um programa.
Ferramentas
readelfé um programa UNIX que exibe informações sobre um arquivo ELF.
Ele é implementado sob a licença GPL no GNU Binary Utilities .
Veja também
- Adendo: Comparação de formatos de arquivos executáveis
- DWARF – um formato para depuração de dados
Referências
- ^ "lexers disponíveis — Pigmentos" .
- ^ Boelen, Michael (1 de julho de 2018). "The 101 of ELF files on Linux: Understanding and Analysis" (html) . Auditoria Linux . Arquivado do original em 28 de abril de 2019 . Recuperado em 16 de maio de 2019 . “Um equívoco comum é que os arquivos ELF são apenas para binários ou executáveis. Já vimos que podem ser usados para peças parciais (código objeto). Outro exemplo são bibliotecas compartilhadas ou até mesmo core dumps (os arquivos core ou a.out). A especificação ELF também é usada no Linux para o próprio kernel e módulos do kernel Linux. »