Quel est l'équivalent du LDD de Linux sur Windows?

Réponses:

53

Voici Dependency Walker.

http://dependencywalker.com/

Daniel A. White
la source
5
est-ce que quelque chose comme ldd existe, pour la ligne de commande uniquement? Je cherche quelque chose que je peux utiliser à partir d'une invite. Préférez une petite commande légère, de préférence sans DLL supplémentaires.
JM Becker
2
Il semble que cela ait une interface de ligne de commande: dependencywalker.com/help/html/hidr_command_line_help.htm
Daniel A. White
3
La syntaxe ressemble à quelque chose comme ceci: depend.exe / c /oc:dependencies.csv /ot:dependencies.txt mydll.dll
Boinst
3
Dependency Walker fonctionne bien, mais constitue un changement radical par rapport à la simplicité de ldd (surtout si vous êtes habitué à écrire un script, un outil consomme sa sortie et, par exemple, empaquete automatiquement les tâches avec lui).
zxq9 du
2
Crashes sur Windows 10.
mikemaccana
42

La dumpbincommande peut être utile pour beaucoup de choses, bien que dans ce cas, le walker de dépendances soit probablement un peu plus détaillé.

dumpbin /dependents some.dll

Exemple de sortie:

C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ Community \ Team Tools \ Static Analysis Tools> dumpbin / dépendants StanPolicy.dll

Dump du fichier StanPolicy.dll

Type de fichier: DLL

L'image a les dépendances suivantes:

mscoree.dll

Sommaire

    2000 .reloc
    2000 .rsrc
   1E000 .text
David St Denis
la source
5
C'est la meilleure option si vous avez installé Visual Studio.
sakra
36

ou l'outil GNU:

i586-mingw32msvc-objdump -p  *.exe    | grep 'DLL Name:'
RzR
la source
1
Objdump peut-il être utilisé pour afficher le chemin complet? J'ai besoin de quelque chose de manière récursive et cela nécessite un chemin complet pour chaque DLL dépendante
INS
3
objdump ne vous montre que ce que contient le fichier. Il n'essaye pas d'effectuer une recherche de chemin comme le lddfait.
jørgensen
26

PowerShell peut le faire

PS> Démarrer-Process -PassThru calc.exe | Get-Process -Module

   Taille (K) Nom du module
   ------- ----------
       908 calc.exe
      1700 ntdll.dll
      1148 kernel32.dll
       432 KERNELBASE.dll
     13856 SHELL32.dll
           ...
Steven Penny
la source
6
Cela semble fonctionner uniquement dans la mesure où le programme trouve réellement des DLL - en cas d'échec, la liste est incomplète.
01d55
12

Si vous utilisez wineet non de vrais Windows, vous pouvez utiliser WINEDEBUG=+loaddll wine <program>.

Janus Troelsen
la source
7
Développer contre Wine pour cibler Windows m'a semblé une idée si étrange que j'ai dû essayer (je cible principalement Linux) ... et en fait, cela fonctionne beaucoup plus facilement que ce à quoi je m'attendais pour le prototypage. Très cool.
zxq9
Re: développement avec Wine au lieu de Windows: notez que ce qui fonctionne dans Wine ne fonctionnera pas nécessairement sur de vrais Windows. J'ai appris cela quand j'ai oublié d'appeler GdiplusStartup, et GDI + a fonctionné sans problème dans Wine, alors que sous Windows, ce n'était pas le cas. Je n'ai remarqué cette erreur qu'après avoir débogué le programme dans Wine, en essayant ensuite de l'exécuter sous Windows.
Ruslan
8

Il y a maintenant un ldddans Cygwin. Si vous avez une très ancienne version de Cygwin, vous devrez utiliser cygcheck.

Janus Troelsen
la source
Oui, mais ce n'est pas très précis
Stef
8

Je suppose que le moyen pour les développeurs Windows de le faire est d'utiliser dumpbin /dependents source.exe. Si vous avez Visual Studio installé , vous pouvez le trouver ici: C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\dumpbin.exe.

JohnnyFromBF
la source
3
Dommage que cela ne montre pas où se trouvent les dépendants afin que vous puissiez voir précisément ceux qui sont réellement utilisés au moment de l'exécution :(.
rubenvb
@rubenvb Process Explorer de la suite SysInternals MS a une vue du volet inférieur de toutes les DLL qu'un binaire charge, y compris leurs chemins et la recherche de symboles / dll.
kevinf
7

Les nouvelles versions de Git sur Windows sont livrées avec quelque chose appelé Git BASH , qui émule de nombreuses commandes Unix utiles, y compris ldd.

Il semble qu'il ne signale que les bibliothèques qui peuvent être trouvées. Vous pouvez donc l'utiliser pour avoir un aperçu de l'emplacement des bibliothèques utilisées, mais pas de celles qui manquent.

Machta
la source
0

Pour windows 10, avec visual studio 2017, je vais dans la barre de recherche de windows et tape:

"Developer Command Prompt for VS 2017" (un cmd.exe spécial pour les développeurs Visual Studio)

Cela permet d'accéder à DUMPBIN qui doit être utilisé avec la balise \ IMPORTS. Par exemple, dans le bon répertoire:

DUMPBIN \ IMPORTS yourfile.exe (d'autres extensions peuvent également fonctionner)

Pour moi, cette liste la DLL et les fonctions utilisées.

Alternativement, vous pouvez utiliser la balise \ ALL qui est beaucoup plus détaillée.

voir l'explication Microsoft de DUMPBIN:

https://docs.microsoft.com/en-us/cpp/build/reference/imports-dumpbin?view=vs-2019

Exemple (avec une partie seulement) du contenu renvoyé par la commande

Via_fx_24
la source