Objektdateien in einer ausführbaren Datei in Linux

8

Gibt es eine Möglichkeit, die Objektdateien zu finden, aus denen die aktuelle ausführbare Datei in Linux generiert wird (RHEL, um genau zu sein). Ich verstehe, dass man "nm" verwenden kann, um die exportierten Symbole zu finden, "ldd", um abhängiges gemeinsames Objekt zu finden.

Ich konnte jedoch keinen Befehl finden, um den Namen von Objektdateien (.o) herauszufinden, aus denen sich die ausführbare Datei zusammensetzt. Ist es möglich?

    
spkhaira 30.04.2009, 11:21
quelle

5 Antworten

6

Wenn es mit Debugging-Informationen kompiliert wurde, ja. Verwenden Sie gdb (man gdb), um die Informationen zu finden.

Wenn es nicht ohne Debug-Informationen kompiliert wurde. Du hast kein Glück.

    
Jase Whatson 30.04.2009 11:39
quelle
4

Die ursprünglichen Namen der Objektdateien werden nicht in den DWARF-Debuginformationen gespeichert.

Jede Objektdatei hat einen DW_TAG_compile_unit -Eintrag im Abschnitt .debug_info . Dieser Eintrag enthält einen Verweis auf die "primäre Quelldatei"  aus dem die Kompilierungseinheit abgeleitet wurde ", aber nicht der Name der Objektdatei. Der DWARF-Standard enthält eine Liste der Attribute, die für jede Übersetzungseinheit gespeichert werden können (Abschnitt 3.1.1, Seite Nummer 44, pdf Seite 58).

Sie können die Informationen anzeigen, die mit dem folgenden Befehl gespeichert werden:

%Vor%

Ausgabe:

%Vor%     
Mikel Rychliski 13.04.2016 14:45
quelle
1

Neben "nullptr" bezieht sich "gemeinsam genutztes Objekt" auf andere gemeinsam genutzte Bibliotheken (verknüpft), nicht auf ursprüngliche Objekte (nicht verknüpft)

    
Marco van de Voort 08.05.2009 14:30
quelle
1

Sie können auch objdump verwenden (solange die ausführbare Datei und die Objekte mit Debuginformationen kompiliert wurden):

%Vor%

awk wird nur zum Extrahieren der relevanten Informationen verwendet (wenn Sie nicht verwenden, erhalten Sie die vollständigen Debug-Informationen in der ausführbaren Datei und den Objekten).

    
isedev 09.04.2016 12:14
quelle
1

Eine Objektdatei wird nach dem Verknüpfen in eine ausführbare Datei umgewandelt. Wenn die Verknüpfung geteilt wird, können Sie diese über gemeinsame Bibliotheken ( ldd ) erhalten. Wenn die Verknüpfung jedoch statisch ist, gibt es nur einen Weg, d. H. Über Debug-Informationen. Sie können debuginfo-Pakete in RHEL (oder Fedora) installieren. Hier sind die Anweisungen

Und dann benutze gdb info sources wie hier beschrieben:

Dies würde Ihnen eine Liste der Quelldateien geben. Um die Objektdateien tatsächlich zu erhalten, müssen Sie jedoch die Build-Tools ( rpmbuild ) genauer betrachten. Um rpmbuild auszuführen, benötigen Sie das Quell-RPM-Paket, das Sie mit den folgenden Anweisungen erhalten:

Nun können Sie das Paket selbst erstellen und analysieren, welche Datei .o in der ausführbaren Datei enthalten ist.

Ich hoffe, das hilft.

    
tuxdna 13.04.2016 20:37
quelle

Tags und Links