Pregunta

Linux: ¿Hay alguna manera de editar una biblioteca compartida compilada?

específicamente estoy buscando cómo agregar el DT_SYMBOLIC flag ¿En una biblioteca compartida binaria ya compilada?

Aquí es por qué estoy preguntando esto:

Nuestra aplicación está compuesta de

  • nuestras propias bibliotecas (estático libxxx.a)
  • Algunas libras de terceros (solo compartido Bibliotecas Libyyy.so)

Todo está bien con la aplicación hasta ahora.

Ahora he reemplazado el nuestro estático* libxxx.a bibliotecas con versiones de bibliotecas compartidas (libxxx.so).

Todo se compila y se enlaza bien.

Pero cuando ejecuto la aplicación ahora se inicia y realiza mucho procesamiento esperado, y luego se bloquea en algún lugar a la mitad del camino. Un Backtrace GDB muestra que el accidente ocurre en algunas de las bibliotecas compartidas de terceros.

Busqué en SOF y encontré un artículo interesante. aquí.

El consejo al que me refiero es

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

Aunque dudo que realmente ayude, creo que podría valer la pena intentarlo.

Cualquier idea de cómo puedo agregar el DT_SYMBOLIC flag ¿En una biblioteca compartida ya compilada/vinculada?

ambiente: Debian Lenny 64bit con G ++ V4.2.4 y Binutils V20.

EDITAR: En Solaris hay un programa llamado elfedit. ¿Hay algo similar para Linux?

¿Fue útil?

Solución

Mientras tanto, he encontrado una herramienta llamada elfsh. Es un caparazón interactivo para examinar y editar objetos ELF, binarios y bibliotecas compartidas.

Vea aquí para la página del proyecto: http://www.eresi-project.org

Lamentablemente, no parece ser muy estable. He experimentado muchos accidentes dentro elfsh sí mismo.

Otros consejos

Si es solo una bandera, el enfoque doloroso es modificar su encabezado de elfos con un editor hexadecimal.

Pero si el tercero Lib se está bloqueando, personalmente miraría el otro extremo de las cosas: lo que ha cambiado con el orden de carga de la biblioteca debido a que se mudó a compartir.

LDD

y

Exportar ld_debug = libs

son tus amigos aquí.

dlopen () ing sus libs compartidos después de que el cargador de tiempo de ejecución cargue sus libres de terceros podría ser suficiente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top