Corrigindo código / símbolos em um binário ELF vinculado dinâmico

Suponha que eu tenha um binário ELF vinculado dinâmico e que eu queira substituir / redirecionar determinadas chamadas de biblioteca. Eu sei que posso fazer isso comLD_PRELOAD, mas quero uma solução permanente no binário, independente do ambiente e que funcione para binários setuid / setgid, nenhum dos quaisLD_PRELOAD pode conseguir.

O que eu gostaria de fazer é adicionar código de arquivos de objetos adicionais (possivelmente em novas seções, se necessário) e adicionar os símbolos desses arquivos de objetos à tabela de símbolos do binário, para que a versão recém-adicionada do código seja usada no lugar de o código da biblioteca compartilhada. Eu acredito que isso deve ser possível sem realmente executar realocações no código existente; mesmo estando no mesmo arquivo, eles devem poder ser resolvidos em tempo de execução da maneira usual do PLT (pelo que vale a pena, eu me preocupo apenas com funções, não com dados).

Por favor, não me dê respostas ao longo da linha "Você não quer fazer isso!" ou "Isso não é portátil!" O que estou trabalhando é uma maneira de fazer a interface de binários com implementações de bibliotecas compartilhadas alternativas ligeiramente incompatíveis com ABI. A plataforma em questão é o i386-linux (ou seja, 32 bits), se for o caso. A menos que eu esteja enganado sobre o que é possível, eu poderia escrever algumas ferramentas para analisar os arquivos ELF e executar meus hacks, mas suspeito que haja uma maneira elegante de usar o vinculador GNU e outras ferramentas para fazer isso sem escrever um novo código.

questionAnswers(4)

yourAnswerToTheQuestion