close

Formato executável e vinculável

Ir para a navegação Ir para a pesquisa
DUENDE
Elf-layout--pt.svg

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 .

00000000 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 |.ELF............|

00000010 02 00 3e 00 01 00 00 00 c5 48 40 00 00 00 00 00 |..>......H@.....|

—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

  1. ^ "lexers disponíveis — Pigmentos" . 
  2. ^ 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. »  

Links externos