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.

David Norman
quelle

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.

gkrogers
quelle
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
Graeme Perrow
quelle
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.

LOKESH
quelle
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.

Subek Shakya
quelle
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
10

Mit Dependency Walker können Sie bestimmen, welche DLL geladen wird.

David Segonds
quelle
Schönes GUI-Programm. Dependency WalkerVersuchen Sie, DLLs und ihre hierarchischen Abhängigkeiten zu finden.
SuB
3

Lösung für Microsoft .Net:

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

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

FlySwat
quelle
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