Unkompilieren Sie eine gch-Datei

9

Ich habe versehentlich eine .h-Datei entfernt, die ich nicht zur Versionskontrolle hinzugefügt hatte, aber ich habe immer noch die .h.gch. Gibt es eine Möglichkeit, das .gch zu dekompilieren?

    
Aaron Yodaiken 20.06.2011, 21:43
quelle

3 Antworten

2

Es ist wahrscheinlich nicht möglich. Die Kompilierung ist typischerweise ein einseitiger Prozess; Sobald Sie es tun, gibt es keine Möglichkeit, Ihren ursprünglichen Quellcode zu rekonstruieren, und Dinge wie Variablennamen, Kommentare und sogar bestimmte Subroutinen werden inline und ausgebügelt. Dasselbe gilt für vorkompilierte Header. Daher ist es wahrscheinlich nicht sinnvoll, die Dokumentation und die Namen aus Ihrer .gch-Datei zu rekonstruieren. Sie könnten vielleicht einige Versionen der Namen in der Kopfzeile rekonstruieren, aber dann würde sich das nicht anders als das, was Sie bereits haben. Es sei denn, Sie haben eine Sicherung, Sie haben ziemlich viel Glück.

    
Mikola 20.06.2011 21:48
quelle
2

Sie können versuchen, das Dienstprogramm strings auszuführen. GCH hat viele interne gcc-Makros definiert, daher empfehle ich zwei Dumps mit Strings:

Zuerst ist für Ihr gch: $ strings file.h.gch

und zweitens ist für vorkompilierte leere Header-Datei (oder, wenn Sie sich erinnern können, was in Ihrem Header enthalten war - auch in dieser Datei enthalten)

Dann können Sie beide Dumps speichern und einen Diff-Lauf ausführen:

Für mein Beispiel:

%Vor%

Es gibt im diff alle Namen ganz oben:

%Vor%

Wie bekomme ich Strukturen und Parameter von Funktionen - ich weiß es nicht. Aber ich schlage vor, wenn Sie diese PCH verwenden können (z. B. ersetzen #include "file.h" mit #pragma GCC pch_preprocess "file.h.gch" ) - dann können Sie eine Baum- und Rtl-Dump mit% Co_de% und% Co_de% tun. Einige Dumps enthalten mehr Informationen, die von verlorenen Header abgeleitet sind.

    
osgx 21.06.2011 00:58
quelle
1

AFAIK Die gch -Dateien sind eine Art Speicherauszug des Compilers nach der Verarbeitung des Headers (zumindest soweit die Datenstrukturen in seinem IR beteiligt sind); vielleicht ist ein guter Teil der Informationen, die in dem ursprünglichen Header enthalten sind, immer noch in irgendeiner Form vorhanden, aber ich glaube nicht, dass es ein Werkzeug gibt, um es zu extrahieren.

    
Matteo Italia 20.06.2011 23:13
quelle

Tags und Links