O que se segue é uma boa referência: link . Ele contém uma bibliografia no final de uma variedade de referências diferentes em diferentes níveis. Se você quiser saber todos os detalhes, vá direto à fonte: link . (Ulrich Drepper escreveu o vinculador dinâmico do Linux.)
Você pode obter uma boa visão geral de todas as seções do seu executável executando um comando como "objdump -h myexe" ou "readelf -S myexe".
A seção .interp contém o nome do carregador dinâmico que será usado para vincular dinamicamente os símbolos neste objeto. A seção .dynamic é uma destilação do cabeçalho do programa formatado para facilitar a leitura do carregador dinâmico. (Por isso, tem ponteiros para todas as outras seções.)
O .got (Tabela Global de Compensação) e .plt (Tabela de Ligação de Procedimentos) são as duas estruturas principais que são manipuladas pelo vinculador dinâmico. O .got é uma tabela indireta para variáveis e o .plt é uma tabela indireta para funções. Cada executável ou biblioteca (que são chamados de "objetos compartilhados") tem seus próprios .got e .plt e são tabelas dos símbolos referenciados pelo objeto compartilhado que estão, na verdade, contidos em algum outro objeto compartilhado.
O dynsyn contém todas as informações sobre os símbolos em seu objeto compartilhado (tanto os que você define quanto os externos que você precisa referenciar). O dynsyn não contém os nomes dos símbolos reais. Esses estão contidos em .dynstr e .dynsyn tem ponteiros em .dynstr. .gnu.hash é uma tabela de hash usada para consulta rápida de símbolos por nome. Ele também contém apenas ponteiros (ponteiros para .dynstr e ponteiros usados para criar cadeias de blocos.)
Quando o objeto compartilhado cancela a referência a algum símbolo "foo", o vinculador dinâmico precisa pesquisar "foo" em todos os objetos dinâmicos com os quais você está vinculado para descobrir qual contém o "foo" que você está procurando (e qual é o endereço relativo de "foo" dentro desse objeto compartilhado. O vinculador dinâmico faz isso pesquisando a seção .gnu.hash de todos os objetos compartilhados vinculados (ou a seção .hash para objetos compartilhados antigos que não têm Depois de encontrar o endereço correto no objeto compartilhado vinculado, ele o coloca no .got ou .plt do seu objeto compartilhado.