2016-06-13 5 views
0

Wie wir wissen, gibt es zwei Methoden zum Laden von Bibliotheken.Wie erkennt man die "Browser-Plug-in" -Bibliotheksabhängigkeit vor der Ausführung

1) Statische Bibliotheken (.a): Bibliothek des Objektcodes, der mit der Anwendung verknüpft ist und Teil der Anwendung wird. 2) Dynamisch verknüpfte gemeinsam genutzte Objektbibliotheken (.so), die bei der Ausführung der Anwendung verknüpft werden und auf zwei Arten verwendet werden können.

a) Dynamically linked at run time but statically aware. 
b) Dynamically loaded/unloaded and linked during execution (i.e. browser plug-in) using the dynamic linking loader system functions. 

Nach dem Übersetzen können wir die Bibliothek Abhängigkeit vom Typ überprüfen 'a', wie unten

objdump -x usr/bin/FlashCP

.....

Dynamische Abschnitt :

libgcc_s.so.1

ERFORDERLICH libc.so.6 ERFORDERLICH

Meine Frage ist, wie man Typ 'b' Bibliothek Abhängigkeit prüfen/erkennen? Bitte schlagen Sie vor, gibt es eine Möglichkeit, vor der Ausführung zu erkennen?

Vielen Dank im Voraus

Thiru

+0

Da dies rein dynamisch ist (theoretisch könnte der Benutzer den DLL-Namen zur Laufzeit eingeben), sehe ich nicht, wie eine statische Prüfung dies abdecken kann. –

+0

normalerweise verwende ich 'ldd'-Befehl für die ausführbare Datei. Dies erzeugt eine Liste der verknüpften Objekte. Bei der Bereitstellung von Qt-Binärdateien habe ich jedoch festgestellt, dass die Plugins nicht gefunden werden. Ich bin am Wandern, wenn das, weil sie selbst von den verbundenen qt Bibliotheken verbunden sind (d. H. Verknüpfung zweiter Ordnung) ... –

+0

Nun, Plugins sind nicht verknüpft, sie werden zur Laufzeit geladen. ldd oder andere Tools wissen nicht, welche Plugins zur Laufzeit benötigt werden. Einige sind optional und werden bei Bedarf geladen (zum Beispiel Plugins für SQL oder Bildformat), andere nicht (Plattform-Plugin), andere werden möglicherweise nie geladen. Sie müssen sich bewusst entscheiden, welche Plugins Sie benötigen und diese entsprechend bereitstellen. Oder verpacken/deployen sie alle. Und dann haben die Plugins selbst auch Abhängigkeiten, aber diese sind normalerweise verlinkt und können durch Ausführen von ldd in den .so-Dateien des Plugins identifiziert werden. –

Antwort

1

Es gibt keine Möglichkeit für Bibliotheken im Allgemeinen zu überprüfen, die dynamisch und deren Funktionen werden aufgerufen über Funktionszeiger geladen werden.

In einigen speziellen Fällen, als ein Hack, können Sie verschiedene Möglichkeiten des Reverse-Engineering der ausführbaren Datei, z. Statische Analyse von Code um die Aufrufe von LoadLibrary und GetProcAddress unter Windows. Sie könnten einige Heuristiken ableiten, die auf vielen ausführbaren Dateien funktionieren würden, aber es gibt keine Möglichkeit zu funktionieren, außer das Ausführen des Codes in einer virtuellen Maschine und das Abfangen aller Aufrufe an LoadLibrary/dlopen, wie sie geschehen.

+0

Er ist auf Linux, nicht auf Windows. :-) –

+0

Danke @Kuba ober und Jon hat Recht .. –

+0

Es spielt keine Rolle, was die Plattform ist: zu versuchen, herauszufinden, was 'dlopen' aufgerufen wird, ist gleichbedeutend mit der Lösung des Halteproblems. Sie können raten und Sie können bestimmte sehr enge Fälle lösen, ohne den Code auszuführen, aber ansonsten können Sie den Code nicht ausführen, um zu sehen, was er tut. –

Verwandte Themen