Wie, um zu bestimmen, eine ausführbare windows-Dateien, DLL-Abhängigkeiten programmgesteuert?
Wie Sie feststellen, welche DLL ' s eine binäre hängt davon ab, mit programmgesteuerten Methoden?
Klar zu sein, ich bin nicht versuchen, um zu bestimmen, die DLL-Abhängigkeiten des Laufenden exec, sondern von jedem beliebigen exec (, dass möglicherweise fehlt eine erforderliche DLL). Ich bin auf der Suche nach einer Lösung für die Implementierung in einer C/C++ - Anwendung. Dies ist etwas, das getan werden muss, um in meiner Anwendung zur Laufzeit und kann nicht getan werden, indem eine Drittanbieter-app (wie hängt).
- Überprüfen Sie in diesem question.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Werfen Sie einen Blick auf die
IMAGE_LOAD_FUNCTION
API. Wird es wieder ein Zeiger auf eineLOADED_IMAGE
Struktur, die Sie verwenden können, um Zugriff auf die verschiedenen Abschnitte einer PE-Datei.Finden Sie einige Artikel, die beschreiben, wie die Strukturen sind gelegt hier, und hier. Sie können den Quellcode herunterladen, für die Artikel hier.
Ich denke, das sollte Ihnen alles, was Sie brauchen.
Update:
Ich habe gerade heruntergeladen der source-code für den Artikel. Wenn Sie eröffnen
EXEDUMP.CPP
und werfen Sie einen Blick aufDumpImportsSection
sollte es den code, den Sie benötigen.Nicht möglich zu bestimmen. Zumindest nicht, ohne eine ganze Menge Arbeit. Jeder binäre können LoadLibrary zum laden einer DLL. Auch wenn Sie den code Scannen und bei allen aufrufen von LoadLibrary, Sie hätte zu bestimmen, welche Zeichenfolgen, die verwendet wurden, um die ID der Bibliothek. Aufspüren, wo in dynamischen Arbeitsspeichers, den der string gesetzt wurde, ist schwieriger als die, die Sie bekämpfen wollen.
LoadLibrary
, oder die Module, werden implizit geladen werden, wenn das instanzieren eines COM-Objekts. Dependency Walker hat eine profiling-Modus, der versucht Konto für Binärdateien, die zur Laufzeit geladen wird, aber Sie kann nicht garantieren, 100% code-coverage, so dass auch dieser Versuch nicht. Wie es oder nicht, dies ist die richtige Antwort.76 Linien zu tun, dass, basierend auf pedump code (vergessen Sie nicht, fügen Sie Imagehlp.lib als Abhängigkeit):
Kurz gesagt, müssen Sie Scannen die PE-Datei ist Einfuhren Abschnitt für jede DLL verwendet, die von der ausführbaren Datei. Dann rekursiv suchen und Scannen jede dll bis Sie gefunden haben, alle Abhängigkeiten.
Natürlich können apps verwenden Sie die LoadLibrary-Familie von Funktionen, die für erforderlich oder optional ist die Funktionalität. Das wird nicht erfasst werden mit dieser Methode.
Dependency Walker können dies tun, indem Sie mit dem Menü "Profil", wenn Sie ein Ziel nicht ausführbar ist. Laden Sie einfach die ausführbare Datei, dann Sag es dem profiling beginnen, und es wird eine Liste aller geladenen Module während der Ausführung des Programms.
Dependency Walker ist in der FAQ (erste Frage...)
Wie wäre es mit einer DLL, die Sie anrufen können, um zu berechnen, alle diese Informationen für Sie und übergeben Sie zurück die Antwort als array von CStrings?
PE-Format-DLL kann dies für Sie tun. Geliefert mit source-code, keine GPL-Beschränkungen. PE-Datei-Explorer ist ein GUI-app, die die DLL verwendet, auch geliefert mit Quelle (kein GPL).