Linguagem de máquina: arquivo elf
O formato ELF (Executable and Linking Format) pode ser empregado em uma de três maneiras: Arquivos ELF relocáveis: são criados por compiladores e montadores e devem ser processados pelo ligador antes de executar. Arquivos ELF executáveis: estão com todas as relocações concluídas e todos os símbolos resolvidos, exceto aqueles símbolos de bibliotecas que devem ser resolvidos em tempo de execução. Objetos compartilhados ELF: são bibliotecas compartilhadas que contém informação para a resolução de símbolos para o ligador, além de código executável. Arquivos ELF podem ser interpretados de duas formas. Compiladores, montadores e ligadores tratam o arquivo como um conjunto de seções - que é descrito por uma tabela de cabeçalhos de seções (Section Header Table), O carregador trata o arquivo como um conjunto de segmentos - descrito por uma tabela de cabeçalhos de programa (Program Header Table). Um segmento normalmente contém várias seções. Objetos compartilhados possuem as duas tabelas. As seções serão processadas pelo ligador, enquanto que segmentos serão mapeados em memória pelo carregador. O diagrama na Figura 23 mostra a visão de ligação à esquerda, e a visão de execução à direita. Visão de ligação Cabeçalho ELF Program header table opcional Seção 1 ... Seção n ... ... Section header table Visão de execução Cabeçalho ELF Program header table Segmento 1 ... Segmento 2 ... ... Section header table opcional
Figura: Dupla personalidade do arquivo ELF Os segmentos possuem informações necessárias para o processo de carregamento do Sistema Operacional, portanto um arquivo só será executável se possuir o cabeçalho de programas. Cabeçalho de programas: cabeçalho das seções, que é de fato uma tabela contendo informações sobre a localização, tipo e tamanho de cada seção; um cabeçalho de segmentos. Arquivo para ser ligado a outro pelo ligador precisa ter um cabeçalho de seções Cabeçalho geral, de seções e de programa possuem uma definição extremamente