Increíblemente poco probable ya que, normalmente, no se inyecta todo el contenido de la biblioteca en el ejecutable.
Solo obtiene lo suficiente para satisfacer todos los símbolos indefinidos. Esto realmente solo puede ser una pequeña proporción de la biblioteca. Una biblioteca generalmente consta de un conjunto de archivos de objetos, de los cuales solo los necesarios se vinculan a su ejecutable.
Por ejemplo, si lo único que llamó en la biblioteca de tiempo de ejecución de C fue exit()
, es muy poco probable que tenga la familia de funciones printf()
en su ejecutable.
Si enlazó directamente con los archivos del objeto, puede tener una oportunidad, ya que se incluirían tanto si se usan como si no (a menos que su enlazador sea inteligente).
Pero incluso eso sería una tarea hercúlea ya que puede que no haya información en el archivo ejecutable sobre qué secciones de código provienen de archivos de objetos específicos. Es potencialmente factible, pero, si hay otra manera, estaría mirando eso primero.
Aclaro el proceso típico:
- Cuatro ficheros objeto,
a.o
, b.o
, c.o
y d.o
contienen las funciones a()
, b()
, c()
y d()
respectivamente. Son todos agregados al archivo abcd.a
.
- Todos son independientes (sin dependencias) excepto por el hecho de que
b()
llama al .
- Tiene un programa principal que llama a
a()
y b()
y lo compila y luego lo vincula con la biblioteca abcd.a
.
- El enlazador arrastra
a.o
b.o
y fuera de la biblioteca y en su ejecutable, que satisface la necesidad de a()
y b()
pero introduciendo una necesidad de c()
, porque b()
lo necesita.
- El vinculador arrastra
c.o
fuera de la biblioteca y dentro de su ejecutable, satisfaciendo la necesidad de c()
. Ahora todos los símbolos indefinidos están satisfechos, el ejecutable está hecho y desempolvado, puede ejecutarlo cuando esté listo.
En ninguna etapa de ese proceso fue d.o
arrastrado a su ejecutable por lo que no tiene ninguna esperanza de obtenerlo.
Actualización: Re el "si hay otra manera, estaría buscando en ese primer" comentario que hice anteriormente, que acaba de indica en un comentario a una de las otras respuestas que usted tiene la fuente código que hizo las bibliotecas que desea extraer. Necesito preguntar: ¿por qué no puedes reconstruir las bibliotecas con esa fuente?Eso me parece una solución mucho más fácil que tratar de recrear las bibliotecas a partir de un marasmo de código ejecutable.
El escenario consiste en tener varios archivos de objetos personalizados, vincularlos en un único archivo de biblioteca personalizada, y el enlace estática que las bibliotecas archivos dentro del ejecutable. Si todas las bibliotecas son personalizadas, ¿no están "completamente integradas" en el ejecutable? En realidad, no quiero obtener el código fuente, solo quiero obtener los archivos de la biblioteca. – HyLian
Si se necesita cada archivo de objeto en la biblioteca para satisfacer todos los símbolos indefinidos, entonces sí, todos estarían allí. Pero ese no es necesariamente el caso. – paxdiablo
Retrocedamos. ¿Por qué no tienes los archivos .sl/.a? – paxdiablo