O que é o formato de ficheiro ELF?
Arquivos com a extensão .elf armazenam dados binários estruturados de acordo com o padrão Executable and Linkable Format - o formato padrão de executáveis e objetos para Linux, a maioria dos sistemas do tipo Unix e muitas plataformas embarcadas. O formato foi introduzido com o Unix System V Release 4 pela Unix System Laboratories e posteriormente ratificado como uma especificação portátil Tool Interface Standard (TIS).
Arquivos ELF podem armazenar os seguintes tipos de conteúdo:
- Arquivos executáveis para aplicativos e ferramentas, frequentemente distribuídos como um arquivo .bin
- Arquivos de objeto compilados, normalmente carregando a extensão
.o - Bibliotecas compartilhadas - arquivos com a extensão .so
- Core dumps (instantâneos de memória produzidos após a falha de um processo)
O formato é construído em torno de uma estrutura binária bem definida. Cada arquivo .elf começa com a sequência mágica de 4 bytes 7F 45 4C 46 (0x7F seguido pelas letras ASCII ELF) no deslocamento 0, seguido por campos de cabeçalho que identificam a arquitetura de destino, o tamanho da palavra (32 bits ou 64 bits) e a ordem dos bytes (little-endian ou big-endian). Duas tabelas opcionais - a tabela de cabeçalho do programa e a tabela de cabeçalho da seção - descrevem então como os segmentos devem ser carregados em tempo de execução e como as seções são organizadas para vinculação.
Embora o padrão ELF tenha sido desenvolvido com sistemas Unix em mente, ele foi rapidamente adotado por outras plataformas, incluindo consoles de videogame como o PlayStation 2 e Wii, Android e muitos ambientes embarcados. O tipo MIME padrão é application/x-elf. O conteúdo de um arquivo .elf não é legível por humanos; ferramentas como readelf e objdump (ambas parte do GNU Binutils) podem inspecionar seus cabeçalhos e descompactar seu código sem executá-lo.
Segurança e proteção
RISCO: HIGHComo qualquer executável, um ELF pode conter malware - botnets de Linux/IoT (por exemplo, variantes Mirai) são enviadas como binários ELF, e um ELF é executado com seus privilégios uma vez iniciado. Execute apenas arquivos ELF de fontes confiáveis; não use «chmod +x» e execute downloads aleatórios. Inspecione ELFs desconhecidos com segurança usando readelf/objdump ou verifique-os no VirusTotal antes de executar. Arquivos .elf de homebrew de console apresentam menor risco (eles rodam dentro da sandbox de um emulador), mas ainda assim obtenha-os de fontes de homebrew respeitáveis.
Detalhes do formato
em resumoProgramas que abrem arquivos ELF
Detalhes técnicos
especificação profunda| Número mágico | `7F 45 4C 46` (0x7F seguido por ASCII `ELF`) no deslocamento de byte 0, presente em cada arquivo ELF válido |
| Tipo MIME | `application/x-elf` |
| Variantes de tamanho de palavra | 32 bits (EI_CLASS = `01`) e 64 bits (EI_CLASS = `02`), codificados no deslocamento 4 no cabeçalho ELF |
| Campo de ordem de bytes | EI_DATA no deslocamento 5: `01` = little-endian, `02` = big-endian; determinado pela arquitetura do hardware de destino |
| Tipos de arquivo (e_type) | ET_EXEC (executável), ET_REL (objeto realocável), ET_DYN (objeto compartilhado ou PIE), ET_CORE (core dump) |
| Arquiteturas de destino | x86, x86-64, ARM, AArch64, MIPS, RISC-V, PowerPC, SPARC e muitas outras, identificadas pelo campo `e_machine` no cabeçalho ELF |
| Identificador OS/ABI | O byte EI_OSABI no deslocamento 7 especifica a ABI de destino: 0 = System V, 3 = Linux, 9 = FreeBSD, 12 = Solaris |
| Layout da estrutura | Cabeçalho ELF → tabela de cabeçalho de programa opcional (segmentos de carga em tempo de execução) → dados → tabela de cabeçalho de seção opcional (seções em tempo de vinculação) |
| Principais seções nomeadas | `.text` (código), `.data` (dados inicializados), `.bss` (dados inicializados com zero), `.rodata` (constantes), `.symtab` / `.dynsym` (símbolos), `.rel` / `.rela` (realocações) |
| Vinculação dinâmica | Objetos compartilhados são resolvidos no momento do carregamento pelo vinculador de tempo de execução (`ld.so`); o caminho do intérprete necessário é armazenado no cabeçalho de programa `PT_INTERP` |
| Informações de depuração | Dados de depuração DWARF são incorporados em seções ELF `.debug_*` e podem ser removidos de binários de produção com o comando `strip` |
| Executáveis independentes de posição | Binários PIE são do tipo ET_DYN e suportam ASLR; o kernel do Linux randomiza seu endereço de carga base a cada lançamento |
| Ferramentas primárias de inspeção | `readelf -a` (cabeçalhos, símbolos, seções) e `objdump -d` (desmontagem), ambos fornecidos pelo GNU Binutils |
| Lançado | 1989 (Unix System V Release 4); adopted as the TIS/System V ABI standard |
| Padrão aberto | Sim · livre de royalties |
| Especificação | refspecs.linuxfoundation.org |
Conversões de ELF
Perguntas e Respostas da Comunidade
perguntado por usuáriosAinda não há perguntas - seja o primeiro a perguntar sobre arquivos ELF.