Pergunta

Linux: Existe uma maneira de editar uma biblioteca compartilhada compilada?

especificamente estou pesquisando sobre como adicionar o DT_SYMBOLIC flag Em uma biblioteca compartilhada binária já compilada?

Aqui está por que estou perguntando isso:

Nosso aplicativo é composto de

  • nossas próprias bibliotecas (estático libxxx.a)
  • Alguns Libs de terceiros (Compartilhado apenas binário bibliotecas lybyyy.so)

Tudo está bem com o aplicativo até agora.

Agora eu substituí o nosso estático* bibliotecas libxxx.a com versões de bibliotecas compartilhadas (libxxx.so).

Tudo compila e links bem.

Mas quando eu execute o aplicativo agora, ele inicia e faz muito processamento esperado - e depois trava em algum lugar na metade do caminho. Um backtrace do GDB mostra que o acidente ocorre em algumas das bibliotecas compartilhadas de terceiros.

Eu procurei no SOF e encontrei um artigo interessante aqui.

A dica a que me refiro é

... add the DT_SYMBOLIC flag to the dynamic section ...

Embora eu duvide que isso realmente ajude, acho que vale a pena tentar.

Qualquer idéia de como posso adicionar o DT_SYMBOLIC flag Em uma biblioteca compartilhada já compilada/vinculada?

meio Ambiente: Debian Lenny 64bit com G ++ v4.2.4 e Binutils V20.

EDITAR: em Solaris, há um programa chamado elfedit. Existe algo semelhante para o Linux?

Foi útil?

Solução

Enquanto isso, encontrei uma ferramenta chamada elfsh. É um shell interativo para examinar e editar objetos ELF, binários e bibliotecas compartilhadas.

Veja aqui a página do projeto: http://www.eresi-project.org

Infelizmente, não parece ser muito estável. Eu experimentei muitos acidentes dentro elfsh em si.

Outras dicas

Se for apenas uma bandeira, a abordagem dolorosa é ajustar seu cabeçalho de elfo com um editor hexadecimente.

Mas se a 3ª parte LIB estiver travando, eu pessoalmente olharia para o outro lado das coisas: o que mudou na ordem de carregamento da biblioteca por causa de você se mudar para compartilhado.

LDD

e

exportar ld_debug = libs

são seus amigos aqui.

Dlopen () ing suas bibliotecas compartilhadas depois que o carregador de tempo de execução carrega suas libs de terceiros pode ser suficiente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top