Frage

Gibt es eine Möglichkeit, eine C ++ Header-Datei für eine OBJ-Datei zu erzeugen? Oder vielleicht ist es ein Dienstprogramm, die OBJ-Dateien anzeigen kann. Ich habe bereits festgestellt, dass objconv konvertiert zwischen verschiedenen Formaten, aber ich kann keine .h Generator / viewer finden.

War es hilfreich?

Lösung

In Anbetracht des C ++ Tag, ist die Situation nicht ganz so hoffnungslos, wie einige der anderen Antworten bedeuten.

Insbesondere zumindest bei den meisten C ++ Compiler, wird der Name einer Funktion verstümmelt werden (Microsoft nennt es „verziert“), um die Parameter, die von dieser Funktion genommen, um anzuzeigen. Das Ergänzungsschema von einem Compiler zum anderem sehr unterschiedlich, aber im Wesentlichen einer von ihnen codiert genügend Informationen für Sie eine Erklärung für die Funktion neu erstellen - den Rückgabetyp, den Namen der Funktion selbst, den Namen der Klasse, wenn es ein Funktionselement und die genaue Anzahl und Art des Parameters der Funktion erwartet.

Auch wenn es nicht durch Mangeln den Namen getan werden müßte, ein C ++ System hat keine wirkliche Wahl, als Parameterinformationen in der Objektdatei aufzunehmen. Wenn Sie Funktionen überlasten, muss der Linker eine gewisse Art und Weise, die Überlastung zu sortieren, mit einem bestimmten Anruf zu verbinden.

sollte ich das Sortieren von diesem Add alle aus ziemlich viel Arbeit sein kann, wenn - nur zum Beispiel, wenn der Code-Vorlagen enthält, wird der Symbolname in der Objektdatei erweitern out alle die Template-Parameter (einschließlich der Standardparameter). Nur zum Beispiel ein triviales Stück Code wie folgt betrachten:

#include <vector>
#include <string>

std::vector<std::string> x;

Wenn ich kompilieren dies mit VC ++ und dann dumpbin /symbols foo.obj tun, ist die Ausgabe etwa 75 Kilobyte. Auch wenn nur mein Quellcode erscheint ein Symbol zu definieren, die Objektdatei enthält Definitionen für rund 180 Symbole, viele von ihnen fast völlig unabhängig von allem, was ich überhaupt geschrieben.

Es ist auch erwähnenswert, dass, wenn die Objektdatei mit Debug-Informationen kompiliert wurde, das wird (in der Regel) produziert wesentlich mehr Typinformationen (und so weiter) in der Objektdatei als auch.

Andere Tipps

Ihre Frage mit visual-c++ markiert ist, damit ich nehme an, Sie sind unter Windows.

, um die Original-Header generieren Dateien von Objektdateien aus ist nicht möglich, da viel (wohl die meisten) der Informationen in Header-Dateien fallen gelassen wird, während der Quellcode in Dateien Objekt kompiliert wird.

Sie können jedoch die dumpbin Dienstprogramm verwenden, um Objektdateien auf einem sehr niedrigen Niveau zu untersuchen. Die einzige Information, die in einer Objektdatei, die Sie interessant sein könnte ist die Liste der Symbolnamen, die in der Objektdatei definiert sind. Sie können keine Typinformationen aus der Objektdatei obwohl erhalten. So können Sie nicht sagen, welcher Art von Wert eine bestimmte Funktion übernimmt oder erwartet.

In einigen Situationen (wenn alle Argumente an die Funktion über den Stack übergeben werden), die Sie möglicherweise die Anzahl der Argumente sagen könnten, die eine Funktion erwartet (durch den Start des Funktionscodes Zerlegen und Zählen, wie viele Werte aus dem Stapel genommen werden ). Das wird nicht funktionieren in der überwiegenden Mehrzahl der Fälle aber.

Es kann keine Header-Generator sein, da die OBJ-Datei nicht alle Informationen enthält, die in einer Header-Datei notwendig wäre. Wie für die OBJ-Dumping, zu tun die Werkzeuge, um das wird Compiler abhängig sein. Das GCC-bezogene Werkzeug, um dies zu tun ist, objdump .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top