Não tenho certeza se o vinculador dinâmico /usr/bin/ld
é invocado automaticamente pelo sistema operacional, quando o arquivo ELF é carregado ou se é invocado pelo código incorporado no arquivo ELF?
Quando uso r2
para depurar um arquivo ELF, ele para na primeira instrução a ser executada, que deveria ser um código vinculador dinâmico, mas não sei se esse código faz parte do arquivo ELF.
O kernel carrega o carregador dinâmico (que não é
/usr/bin/ld
; veja quais são os arquivos ELF executáveis respectivamente para vinculador estático, vinculador dinâmico, carregador e carregador dinâmico? ).Quando você executa um binário ELF, o kernel usa seu carregador binário ELF específico; para binários vinculados dinamicamente, isso procura o interpretador especificado nos cabeçalhos ELF, carrega-o e o instrui a executar o binário de destino. O interpretador é o carregador dinâmico, que carrega todas as bibliotecas necessárias, resolve os símbolos indefinidos e salta para o endereço inicial do programa. (Consulte Quais tipos de arquivos executáveis existem no Linux? para obter detalhes sobre as cargas binárias no kernel.)
LWN tem um artigo que entra em detalhes, Como os programas são executados: binários ELF .