Wie liste ich importierte Symbole in der ELF-Datei auf?


Antworten:


15

Versuchen Sie objdump -T 'ELF-Datei'


Ich dachte, objdump -T arbeitete hauptsächlich an gemeinsam genutzten Bibliotheken ...
Jim Mcnamara

na ja ... nicht wirklich, wenn ich es tue: objdump -t / bin / ls gibt es zurück: "SYMBOL TABLE: no symbols", mit -T (das DYNAMIC SYMBOL TABLE auflistet) werden viele Daten ausgegeben, wie: "00000000 DF UND 00000000 GLIBC_2.0 strchr "
Mr Shunz

5

Die Ausgabe von objdump ist zu diesem Zweck etwas zu umfangreich und erfordert ein gutes Parsing, um die tatsächlichen Importe zu ermitteln.

Ich lese mich lieber für diesen Zweck:

readelf -d dynamic-buffer-test

Dynamic section at offset 0x630a8 contains 23 entries:
 Tag                Type                 Name/Value
 0x0000000000000001 (NEEDED)             Shared library: [libstdc++.so.6]
 0x0000000000000001 (NEEDED)             Shared library: [libm.so.6]
 0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]
 0x0000000000000001 (NEEDED)             Shared library: [libgcc_s.so.1]

Wie Sie sehen, sind die benötigten Bibliotheken mit "NEEDED" gekennzeichnet.


Es hängt nur von dem Modus ab, in dem Sie es aufrufen. Versuchen Sie es objdump -p /path/to/binary | grep NEEDED.
Sherrellbc

Dies scheint nur Bibliotheken aufzulisten, keine Symbole.
Plugwash

5

Ich ziehe readelf.

readelf -s <file>


Das listet nur die benötigten Bibliotheken auf. Die Frage ist, welche Symbole aus diesen Bibliotheken importiert werden.
Alcaro

1

Zusammen mit den anderen hier geposteten Antworten möchte ich noch eine vorschlagen. Die gedruckten Inhalte sind eine Funktion des Dateiformats, in dem sich ELF gut zur Lösung dieses Problems eignet.

objdump -p /path/to/binary | grep NEEDED

Das grep extrahiert einfach den Inhalt des Dynamic Section, aber es ist das Format der objdump -pAusgabe, das dies zu einer einfachen Lösung macht.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.