2011-06-20 15 views

Respuesta

2

Probablemente no sea posible. La compilación es típicamente un proceso de una sola dirección; una vez que lo hagas, no hay forma de reconstruir tu código fuente inicial, y elementos tales como nombres de variables, comentarios e incluso ciertas subrutinas se alinearán y corregirán. Lo mismo ocurre con los encabezados precompilados, por lo que no es probable que haya una buena forma de reconstruir la documentación y los nombres de su archivo .gch. Quizás puedas reconstruir alguna versión de los nombres en el encabezado, pero de nuevo esto no sería diferente de lo que ya tienes. A menos que tenga una copia de seguridad, no tiene suerte.

+3

Creo que es técnicamente posible, porque el archivo 'gch' parece ser una especie de" archivo de encabezado binario "en lugar de algo que realmente se" compiló ". Los encabezados precompilados contienen toda la información que anteriormente estaba en los encabezados, por ejemplo, las macros/constantes '# define'-d en un encabezado precompilado están ahí como si hubiera incluido el encabezado para real. Hasta aquí las buenas noticias. Ahora, para las malas noticias, no creo que exista una herramienta para revertir el proceso. Si hubiera uno, también se debería adaptar a la versión del compilador _exact_, debido a las diferentes representaciones binarias. – Damon

1

AFAIK los archivos gch son una especie de volcado de la memoria del compilador después de procesar el encabezado (al menos en lo que se refiere a las estructuras de datos involucradas en su IR); tal vez una buena parte de la información contenida en el encabezado original todavía está allí de alguna forma, pero no creo que haya una herramienta para extraerlo.

2

Puede intentar ejecutar la utilidad strings. GCH tiene una gran cantidad de macro gcc interna definida, por lo que sugiero que hagas dos vertederos con cuerdas:

En primer lugar es para su GCH: $ strings file.h.gch

y el segundo es para el archivo de cabecera vacío precompilado (o, si usted puede recordar , lo que estaba incluido en su cabecera - incluyen en este archivo también)

continuación, puede guardar dos vertederos y hacer una carrera diff:

Para mi ejemplo:

#define d1234 

#undef dsgf 

int asdfgh(char a); 
int ghjkl(int g, int h); 

hay en el diff todos los nombres en la parte superior:

1074a1075 
> asdfgh 
1189a1191 
> d1234 
1200a1203 
> dsgf 
1287a1291 
> ghjkl 

cómo conseguir estructuras y parámetros de funciones-No sé. Pero le sugiero que si puede usar este archivo pch (por ejemplo, reemplace #include "file.h" con #pragma GCC pch_preprocess "file.h.gch") - entonces puede hacer un tree y rtl dump con -fdump-tree-all-all y -frtl-dump-all-all. Algunos de los volcados contendrán más información, derivada del encabezado perdido.

Cuestiones relacionadas