Pregunta

No estoy seguro de si esto es posible, pero teniendo en cuenta un archivo ejecutable (foo.exe), con tiene muchas bibliotecas que se ha relacionado de forma estática.

¿Hay algún software que extraer de este archivo al Lib (o .a) que se encontraba en el interior del ejecutable?

Gracias.

¿Fue útil?

Solución

Increíblemente poco probable ya que, por lo general, usted no consigue todo el contenido de la biblioteca inyectadas en su ejecutable.

Sólo se tiene suficiente para satisfacer a todos los símbolos no definidos. Esto puede ser en realidad sólo una pequeña proporción de la biblioteca. Una biblioteca general, consiste en un conjunto de archivos de objetos de los cuales sólo los necesarios están vinculados en su ejecutable.

Por ejemplo, si la única cosa que llama en la biblioteca de tiempo de ejecución C era exit(), que sería muy poco probable que tenga la familia printf() de funciones en su ejecutable.

Si usted se conectó con los archivos objeto directamente, es posible que tenga una oportunidad, ya que serían incluidos si se usa o no (a menos que el conector es un inteligente uno).

Pero incluso eso sería una tarea hercúlea ya que puede haber ninguna información en el archivo ejecutable en cuanto a qué secciones de código proceden de los archivos de objetos específicos. Es potencialmente factible, pero, si no hay otra manera, estaría buscando en ese principio.

Permítanme aclarar el proceso típico:

  1. Cuatro ficheros objeto, a.o, b.o, c.o y d.o contienen las funciones a(), b(), c() y d() respectivamente. Son todos añade al archivo abcd.a.
  2. Son todas autónomo (sin dependencias), excepto por el hecho de que b() llama c().
  3. Usted tiene un programa principal que llama a() y b() y se compila a continuación, se enlaza con la biblioteca abcd.a.
  4. El enlazador arrastra a.o y b.o 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.
  5. El enlazador luego arrastra c.o de la biblioteca y en su ejecutable, que satisface la necesidad de c(). Ahora todos los símbolos no definidos son satisfechos, el ejecutable se hace y se sacudió, se puede ejecutar cuando esté listo.

En ningún momento en ese proceso fue d.o arrastrado a su ejecutable por lo que tiene cero esperanza de conseguir que fuera.

Actualización: Re "si hay otra manera, estaría buscando en ese primer" comentario que hice anteriormente, que acaba de indica en un comentario a uno de las otras respuestas que tiene el código fuente que hizo las bibliotecas que desea extraer. Tengo que preguntar: ¿por qué no se puede reconstruir las bibliotecas con esa fuente? Esto me parece una solución mucho más fácil que intentar recrear las bibliotecas de una ciénaga de código ejecutable.

Otros consejos

Imagine tener 10 libros en idioma que no entiende, sin cubiertas, páginas de título, número de páginas y capítulos. Algunos de los libros pueden estar incompletos. Todas las páginas se mezclan juntos por lo que es imposible saber dónde está el comienzo y el final de cada libro. (Cada página es una llamada de función) Ahora tratar de encontrar la página 123 del libro 5 (digamos que se ha mencionado anteriormente la función Salir () ).

Bueno, es posible ...

Parece que usted está pidiendo un descompilador. Estas herramientas son difíciles de usar (probablemente imposible medianamente sofisticado C ++) y si hay alguna otra manera de resolver su problema, incluyendo la toma de un par de meses para volver a escribir las bibliotecas, lo recomiendo ese curso de acción.

Al igual pax señaló, incluso si se hizo uso de un descompilador, sólo se podrían obtener las funciones de biblioteca que el ejecutable llamado.

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