Dependency Walker

Dependency Walker ist ein Freeware- (nicht Open-Source!) Tool, das dazu dient die DLL-Abhängigkeiten einer ausführbaren Datei (.exe-Datei) oder einer dynamischen Library (.dll-Datei) zu erkunden.

Hintergrund - .EXE und .DLL

Die meisten Programme bestehen zu einem Großteil aus kompiliertem Programmcode. Bei kleinen Programmen ist dieser Code zur Gänze in der .EXE-Datei gespeichert. Größere Programme teilen den Code allerdings auf eine oder mehrere .DLL-Dateien auf; die .EXE-Datei dient dann nur mehr als Startpunkt.

Diese Bibliotheken (.DLL) werden zur Kompilierzeit in das Programm gelinkt, allerdings kommen in die .EXE-Datei nur Verweise auf Funktionen, und die Funktionen selbst liegen in den .DLL-Dateien. Wenn das Programm gestartet wird, linkt der „dynamische Linker“ alle .DLL's, die vom Programm benötigt werden im Speicher zu einem „ausführbaren Abbild“ („Executable Image“) zusammen.

Damit ist's aber noch nicht getan! Jede .DLL kann selbst noch gegen andere .DLLs gelinkt werden, und diese Bibliotheken können ebenfalls gegen andere gelinkt werden, und so weiter.

Wenn nun eine .DLL-Datei fehlt oder nicht gefunden werden kann, kann das Programm selbstverständlich nicht korrekt gestartet werden, da ja ein Teil des Codes fehlt.

Deshalb ist es manchmal nützlich zu erfahren, welche .DLL's nun tatsächlich von einem Programm benötigt werden.

Download und Installation

Man kann den Dependency Walker von folgender Webseite herunterladen: http://www.dependencywalker.com/ Es gibt eine 32-Bit-Version („x86“) und eine 64-Bit-Version („x64“). Wer ein 64-Bit System hat, kann sich die x64-Version herunterladen; andererseits funktioniert auch die x86-Version auf 64-Bit-Systemen einwandfrei.

Das heruntergeladene Verzeichnis muss entpackt werden, und enthält nur die depends.exe, die depends.dll und eine Hilfedatei. Die „Installation“ beschränkt sich auf das Entpacken des Archivs in einen Ordner, den ihr wiederfindet.

Benutzung

Das Programm wird durch einen Doppelklick auf depends.exe gestartet.

Anschließend wählt man die zu untersuchende .EXE-Datei (oder .DLL-Datei) aus, indem man im Menü auf File→Open klickt.

Oft gibt es Fehlermeldungen, dass nicht alle Bibliotheken gefunden werden können. Diese kann man ignorieren.

Das geöffnete Programm sieht dann so aus:

Das linke obere Fenster zeigt die Abhängigkeiten der ausführbaren Dateien als Baum, wobei jeder Ast (der einer Datei entspricht) auf- oder zugeklappt werden kann. Das untere Fenster zeigt alle direkten und indirekten Abhängigkeiten als Liste mit diversen Zusatzinformationen (z.B. ob es eine 64-Bit-.DLL ist).

Mit dem Kontextmenü (Rechtsklick auf eine Datei) kann man alle „Äste“ auf- oder zuklappen und den Pfad der Datei kopieren.

Wählt man eine der Bibliotheken aus, sieht man im oberen rechten Fenster alle importierten Symbole eines Moduls, und im unteren rechten Fenster alle exportierten Symbole des Moduls. Ist dabei der „C++“-Schalter (oder View→Undecorate C++ Functions) aktiviert, werden alle C++-Symbolnamen „demaskiert“ 1).

Klickt man doppelt auf eine Datei, öffnet sich eine neue Sitzung, das die Abhängigkeiten dieses Moduls zeigt. Dies ist natürlich ein Unterbaum des bereits gezeigten Baumes.



Und das war's auch schon. Damit solltet ihr dieses Tool benutzen können.


Hat dir dieser Artikel geholfen? Wenn nicht oder wenn du Verbesserungs- bzw. Erweiterungsvorschläge hast, dann schreib das bitte einfach auf die Diskussionsseite.

1)
In C++ wird nicht nur der Name einer Funktion als Symbol verwendet, es werden auch noch Informationen wie Zugehörigkeit zu einer Klasse, einem Namespace, und Parametertypen darin kodiert