Wie finde ich heraus, welche Funktionen eines gemeinsamen Objekts von einem Programm oder einer anderen Bibliothek genutzt werden?
Wie finde ich heraus, welche Funktionen ein gemeinsames Objekt von einem Programm verwendet werden oder eine andere Bibliothek?
In diesem speziellen Fall, würde ich mag, um zu sehen, welche Funktionen in /lib/libgcc1_s.so.1 verwendet werden, die durch eine dynamische Bibliothek.
Da Sie sind dynamisch miteinander verknüpft, objdump -d nicht beheben Sie die Funktion Anruf-Adressen.
Gibt es eine Möglichkeit, kurz der Ausführung des Programms in einem debugger oder eines statisch?
Danke,
Luca
Edit:
nm und readelf nicht tun, brauche ich nicht zu sehen, welche Symbole vorhanden sind, werden in einem gemeinsamen Objekt, aber die sind eigentlich in einem anderen Objekt, das links zu.
InformationsquelleAutor der Frage lultimouomo | 2011-02-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
nm wird nur funktionieren, wenn die Bibliothek war nicht beraubt und seine Symbole. Allerdings
nm -D
könnte Ihnen zeigen, einige Infos:Aber es gibt ein anderes tool, das Ihnen helfen kann: readelf
Und wenn man sich mal die man-pages, option -s:
Displays the entries in symbol table section of the file, if it has one.
EDIT:
Gut, die Symbole sind nicht implementiert im inneren des Objekts, die Sie inspizieren, mit nm wird mit einem U flag in front, doch der nm nicht sagen, werden Sie die Bibliothek auf Ihrem system implementiert, das symbol.
So, was Sie suchen, können wohl erreicht werden, mit einer Mischung aus ldd und nm. ldd sagt, die Bibliotheken, die Ihre Anwendung ist verbunden mit, und nm gibt die Symbole nicht definiert sind (U flag) oder lokal umgesetzt (T flag).
Nach Auflistung alle undefinierten Symbole (mit nm) auf die Ziel-Anwendung, sollten Sie eine Iteration durch alle Bibliotheken berichtet von ldd auf der Suche nach diesen Symbolen (mit nm). Wenn Sie feststellen, das symbol und es ist vorausgegangen durch das T-flag, fand Sie es.
Übrigens, ich schrieb gerade diese one-liner für die bash zur Veranschaulichung meiner Idee. Es wird analysiert, eine Anwendung mit dem Namen gewinnen und versucht, die Bibliotheken, die Umsetzung aller Symbole, die wie berichtet nicht definiert.
Oder, wenn Ihr terminal unterstützt Farben:
Ich bin sicher, jemand findet eine performance-Verbesserung.
Ausgänge:
InformationsquelleAutor der Antwort karlphillip
Haben Sie sich ltrace? Es fängt die Anrufe auf gemeinsam genutzte Bibliothek von Funktionen zur Laufzeit und druckt Daten über Sie, sobald Sie auftreten.
Da dies eine dynamische Lösung, würde es nicht drucken Sie alle Informationen für einen library-call durch aus in den Teil des Programms, der nie ausgeführt wird. Aber es könnte noch hilfreich sein, je nach Ihren Bedürfnissen.
InformationsquelleAutor der Antwort Jay Conrod
Ich bin mir nicht bewusst, auch
nm
ist von begrenztem nutzen für das, was Sie scheinen wollen. Auch, "Vorglühen" (der GNU linker) könnte erlöschen alle Annahmen, die Sie machen, nachdem Sie mit einem Werkzeug, das angeblich machen könnte. Finden Sie die ld.also Mann Seite.LD_PRELOAD
kann durch jedermann benutzt werden, um das überschreiben der Auflösung der Symbole, wie Sie auftreten würde, unter normalen Umständen.Jedoch auch ohne debugger, die Sie verwenden können
LD_DEBUG
zu sehen, welche Funktion letztendlich genutzt wird.InformationsquelleAutor der Antwort 0xC0000022L
Vielleicht die
nm
tool kann Ihnen helfen, denn es zeigt die Symbole für die Namen, die in einer binären Datei.Es ist so einfach wie das ABC zu verwenden:
InformationsquelleAutor der Antwort jopasserat
Dies kann erreicht werden durch eine Technik namens statischen Analysen im Reverse Engineering
Du brauchst einen Disassembler für diese. Sehen http://en.wikipedia.org/wiki/Disassembler
IDA PRO ist ein guter disassembler Hexe Ihre Frage beantwortet.Es ist in der Lage zu Lesen ELF-Datei-format, aber leider ist es nicht kostenlos.
InformationsquelleAutor der Antwort cons0ul