LD_PRELOAD equivalente para o processo em execução?

2

Existe uma maneira de trocar a implementação de uma função de biblioteca compartilhada depois que a biblioteca já foi carregada em um processo em execução? Estou procurando um comportamento como LD_PRELOAD normalmente o levaria, mas para um processo existente.

    
por joshlf 18.04.2017 / 20:14

1 resposta

2

Não, não realmente. Você não pode facilmente substituir uma biblioteca por outra dentro de alguns processos em execução (as informações de realocação e os endereços seriam diferentes) ....

No entanto, se você criar esse programa e puder melhorar seu código-fonte, poderá fazer outros truques (por exemplo, dlopen (3) ...)

Leia a página wiki em atualização dinâmica de software .

Talvez o StackOverflow seja um lugar melhor para fazer essas perguntas relacionadas, se você mostrar um pouco do seu código-fonte. Ou talvez o SoftwareEngineering ...

    
por 18.04.2017 / 20:33
como gerenciar múltiplas bibliotecas no mesmo sistema linux? [fechadas] ______ qstntxt ___ ______ azszpr358957 ___

Se a sua biblioteca definir seu soname corretamente, você poderá ter várias versões instaladas sem qualquer dificuldade. Por exemplo, atualmente tenho três versões de %code% installed:

%pre%

Isso funciona porque os programas são vinculados ao soname, então qualquer coisa construída para a versão 5 vincula-se a %code% , qualquer coisa construída para links da versão 6 contra %code% etc. O requisito da biblioteca é que todas as versões com o mesmo soname devem preservar sua ABI: novas versões podem adicionar recursos, mas não podem quebrar recursos existentes. Qualquer quebra de mudança implica um salto sonoro.

Se tudo isso for feito corretamente (no lado da biblioteca), você nunca precisará de várias versões de uma biblioteca com o mesmo soname: contanto que você tenha a versão mais recente, você Será capaz de executar qualquer software construído em qualquer versão da biblioteca com o mesmo soname. Continuando com o exemplo %code% , o software construído com a versão 5.1 da biblioteca roda bem com a versão 5.2. (O inverso não é necessariamente verdadeiro; o software que usa novos recursos em 5.2 não será executado com 5.1.)

Pode valer a pena olhar para %code% (sim, eu sei) se você ainda não estiver usando: ele tem um razoavelmente utilizável esquema de versionamento que lida com solavancos sonoros.

Algumas bibliotecas chegam a extremos extraordinários para minimizar a necessidade de solavancos sonoros; A biblioteca GNU C é um exemplo, usa extensivamente versões de símbolos para evitar quebrar a ABI enquanto ainda introduz novos recursos e mudanças incompatíveis com versões anteriores (apenas mantém as versões antigas, dentro da biblioteca).

    
___ configuração vhost massiva genérica causa código de status 404 em todas as requisições vhost