A.out
# A.out

a.out é um formato de arquivo usado em antigas versões de sistemas operacionais baseados no Unix para executáveis, código objeto, e, em sistemas posteriores, biblioteca compartilhada. O nome vem de assembler output (saída do programa montador).
a.out permaneceu como o nome padrão de saída para arquivos executáveis criados a partir de certos compiladores e linkers, quando nenhum nome era especificado, mesmo sendo esses executáveis não mais do formato a.out.

## Formato

Executáveis a.out tipicamente são de algumas das variantes como OMAGIC, NMAGIC, QMAGIC, ou ZMAGIC. O formato OMAGIC tinha segmentos contíguos depois do cabeçalho, sem separação de text e data. O format NMAGIC era similar ao OMAGIC, no entanto o segmento de dados era carregado na página imediatamente posterior ao final do segmento text, e o segmento text era marcado com somente leitura. O formato ZMAGIC adicionou suporte para paginamento sob demanda, e o QMAGIC permitiu que o cabeçalho do a.out pudesse ser mesclado com a primeira página do segmento text, poupando memória. Os binários QMAGIC são tipicamente carregados uma página acima do último endereço do espaço virtual, para permitir que haja tratamento de referências de ponteiro nulas por meio de falha de segmento. Um arquivo a.out consiste de até 7 seções. Em ordem, elas são:

### exec header

    Contém parâmetros usados pelo núcleo para carregar o arquivo binário na memória e executá-lo, e pelo editor de link ld combinar o arquivo binário com outros arquivos. Essa seção é a única mandatória.

### text segment

    Contém o código de máquina e dados relacionados que são carregados na memória quando o programa executa. Pode ser carregado como de leitura somente.

### data segment

    Contém os dados de início; sempre carregados como memória de escrita.

### text relocations

    Contém registros usados pelo editor de link para atualizar os ponteiros no segmento text quando combinando arquivos binários.

### data relocations

    Como o item anterior, mas para ponteiros de segmento de dados.

### symbol table

    Contém informação usada pelo editor de link para referência cruzada de endereços e nomes de variáveis e funções (símbolos) entre os arquivos binários.

### string table

    Contém a cadeia de caracteres correspondents aos nomes dos símbolos.