Wie finde ich heraus, welche DLLs eine ausführbare Datei laden wird?


74

Wie kann ich herausfinden, welche DLLs geladen werden, wenn ich eine ausführbare Windows-Datei habe?

Ich spreche nur davon, welche statisch geladen werden, nicht welche, die mit etwas wie LoadLibrary dynamisch geladen werden könnten.

Antworten:


34

Es gibt Dienstprogramme, die dies für Sie erledigen.

In der Vergangenheit habe ich das MS-Tool (abhängige.exe) verwendet, das mit (glaube ich) VB geliefert wurde:
https://msdn.microsoft.com/en-us/library/8kche8ah.aspx

und das gibt es auch:
http://dependencywalker.com/

und wahrscheinlich auch andere.


7
Die mit Visual Studio / VB / ... installierte " abhängige.exe " und die " abhängige.exe ", die von dependencywalker.com heruntergeladen werden kann, sind genau das gleiche Tool (nur verschiedene Versionen). ;)
Paul Groke

2
Der Link ist tot.
ice1000

57

dumpbin ist ein Tool, das mit VC ++ geliefert wird.

So sehen Sie, welche DLLs ein Programm importiert:

  • Öffnen Sie Visual Studio
  • Menüpunkt Werkzeuge | Visual Studio-Eingabeaufforderung
  • CD in Ordner mit ausführbarer Datei
  • dumpbin / abhängige was auch immer.exe
Dump of file whatever.exe

File Type: EXECUTABLE IMAGE

  Image has the following dependencies:

    AIOUSB.DLL
    sqlite3.dll
    wxmsw293u_core_vc_custom.dll
    wxbase293u_vc_custom.dll
    KERNEL32.dll
    ole32.dll
    OLEAUT32.dll
    MSVCP90.dll
    MSVCR90.dll

Verwenden Sie, um zu sehen, welche Funktionen (und DLLs) importiert werden

C:\> dumpbin /imports whatever.exe

5
Ich glaube, es sollte sein: dumpbin / abhängige was auch immer.exe
Baiyan Huang

4
/ abhängige zeigt Ihnen nur die DLLs. / imports zeigt Ihnen Funktionen und DLLs.
Graeme Perrow

1
Dies ist die beste Antwort. Leider zeigt dieses Tool nur DLLs an, die direkt für die .exenicht DLLs geladen wurden, von denen die ausführbare Datei indirekt abhängt.
SuB

15

Öffnen Sie die Eingabeaufforderung und geben Sie den folgenden Befehl ein

Aufgabenliste / m / fi "imagename eq netbeans.exe"

Geben Sie stattdessen netbeans.exe ein, unabhängig von Ihrem Exe-Dateinamen.


1
Ich habe dies verwendet und es gibt mir keine vollständige Liste der DLLs, die es verwendet. Es gibt eine Reihe von Crystalreports-DLLs, die meine Exe verwendet, aber ich sehe keine in der Liste, die durch diesen Befehl gedruckt wird. Irgendwelche Ideen?
user734028

11

Gehen Sie einfach zur Eingabeaufforderung und geben tasklist /mSie ein. Sie sehen die Liste der DLL-Dateien, die von einem bestimmten Programm verwendet werden.


Ja, dies macht das, was Sie sagen. Wenn eine ausführbare Datei jedoch mehrere Prozesse startet, werden Sie nie über die Befehlszeile herausfinden, welcher Prozess von den ausführbaren Dateien gestartet wurde. Daher kennen Sie nicht alle abhängigen DLLs der ausführbaren Datei.
Fazi

Lädt die Pfade nicht.
Josué Zatarain Espinosa


3

Lösung für Microsoft .Net:

foreach (AssemblyName a in Assembly.ReflectionOnlyLoadFrom("SAMPLE.EXE").GetReferencedAssemblies()) 
{
    MessageBox.Show(a.Name); 
}


1

Es gibt ein praktisches Tool namens NDepend, mit dem Sie alle DLL-Abhängigkeiten erhalten.


NDependist ein statisches Analysetool für .NET-verwalteten Code . Es funktioniert also nur für .NET-Anwendungen.
SuB

Sie haben vergessen zu erwähnen, dass es als vs-Erweiterung funktioniert.
Josué Zatarain Espinosa

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.