Jaki jest odpowiednik ldd Linuksa w systemie Windows?

Odpowiedzi:

53

Oto Dependency Walker.

http://dependencywalker.com/

Daniel A. White
źródło
5
czy istnieje coś takiego jak ldd, tylko dla wiersza poleceń? Szukam czegoś, czego mogę użyć z monitu. Preferuj małe lekkie polecenie, najlepiej bez dodatkowych bibliotek DLL.
JM Becker
2
Wygląda na to, że ma interfejs wiersza poleceń: dependencywalker.com/help/html/hidr_command_line_help.htm
Daniel A. White
3
Składnia wygląda mniej więcej tak: depends.exe / c /oc:dependencies.csv /ot:dependencies.txt mydll.dll
Boinst
3
Dependency Walker działa dobrze, ale jest to rażąca zmiana w stosunku do prostoty ldd (zwłaszcza jeśli jesteś przyzwyczajony do tworzenia skryptów, narzędzie zużywa swoje dane wyjściowe i, powiedzmy, automatycznie pakuje zadania).
zxq9
2
Awarie w systemie Windows 10.
mikemaccana
42

dumpbinPolecenie może być przydatne do wielu rzeczy, chociaż w tym przypadku zależność Walker jest prawdopodobnie nieco bardziej gadatliwy.

dumpbin /dependents some.dll

Przykładowe dane wyjściowe:

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

Zrzut pliku StanPolicy.dll

Typ pliku: DLL

Obraz ma następujące zależności:

mscoree.dll

Podsumowanie

    2000 .reloc
    2000 .rsrc
   1E000 .text
David St Denis
źródło
5
Jest to najlepsza opcja, jeśli masz zainstalowany program Visual Studio.
sakra
36

lub narzędzie GNU:

i586-mingw32msvc-objdump -p  *.exe    | grep 'DLL Name:'
RzR
źródło
1
Czy można użyć objdump do wyświetlenia pełnej ścieżki? Potrzebuję czegoś rekurencyjnego, a to wymaga pełnej ścieżki dla każdej zależnej biblioteki DLL
INS,
3
objdump pokazuje tylko, co zawiera plik. Nie próbuje przeszukiwać ścieżki, jak lddrobi.
jørgensen
26

PowerShell może to zrobić

PS> Start-Process -PassThru calc.exe | Get-Process -Module

   Rozmiar (K) ModuleName
   ------- ----------
       908 calc.exe
      1700 ntdll.dll
      1148 kernel32.dll
       432 KERNELBASE.dll
     13856 SHELL32.dll
           ...
Steven Penny
źródło
6
Wydaje się, że działa to tylko wtedy, gdy program faktycznie znajduje biblioteki dll - w przypadku niepowodzenia lista jest niekompletna.
01d55
12

Jeśli używasz, winea nie prawdziwego systemu Windows, możesz użyć WINEDEBUG=+loaddll wine <program>.

Janus Troelsen
źródło
7
Tworzenie oprogramowania przeciwko Wine z myślą o systemie Windows wydało mi się tak dziwnym pomysłem, że musiałem go wypróbować (przede wszystkim celuję w Linuksa) ... i tak naprawdę działa znacznie płynniej niż oczekiwałem w przypadku prototypowania. Bardzo bardzo fajne.
zxq9
Re: programowanie przy użyciu Wine zamiast Windows: zauważ, że to, co działa w Wine, niekoniecznie będzie działać w prawdziwym systemie Windows. Nauczyłem się tego, gdy zapomniałem zadzwonić GdiplusStartup, a GDI + działało bez problemów w Wine, podczas gdy w systemie Windows nie. Zauważyłem ten błąd dopiero po debugowaniu programu w Wine, próbując następnie uruchomić go w systemie Windows.
Ruslan
8

Jest teraz lddw Cygwin. Jeśli masz bardzo starą wersję Cygwin, będziesz musiał użyć cygcheck.

Janus Troelsen
źródło
Tak, ale nie jest to zbyt dokładne
Stef
8

Wydaje mi się, że sposobem programisty Windows jest użycie dumpbin /dependents source.exe. Jeśli masz Visual Studio zainstalowany można go znaleźć tutaj: C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\dumpbin.exe.

JohnnyFromBF
źródło
3
Szkoda, że ​​to nie pokazuje, gdzie znajdują się elementy zależne, więc możesz dokładnie zobaczyć, które z nich są faktycznie używane w czasie wykonywania :(.
rubenvb
@rubenvb Process Explorer z pakietu SysInternals MS ma dolny panel widok wszystkich bibliotek DLL ładowanych przez pliki binarne, w tym ich ścieżki i wyszukiwanie symboli / dll.
kevinf
7

Nowsze wersje Gita dla Windows są dostarczane z czymś, co nazywa się Git BASH , które emuluje wiele przydatnych poleceń Unix, w tym ldd.

Wygląda na to, że zgłasza tylko biblioteki, które można znaleźć. Możesz więc użyć tego, aby uzyskać przegląd lokalizacji używanych bibliotek, ale nie tych, których brakuje.

Machta
źródło
0

W przypadku systemu Windows 10 w programie Visual Studio 2017 przechodzę do paska wyszukiwania okien i wpisuję:

„Developer Command Prompt for VS 2017” (specjalny cmd.exe dla programistów Visual Studio)

Pozwala to uzyskać dostęp do DUMPBIN, którego należy używać ze znacznikiem \ IMPORTS. Na przykład w odpowiednim katalogu:

DUMPBIN \ IMPORTS yourfile.exe (inne rozszerzenia też mogą działać)

Dla mnie ta lista DLL i używane funkcje.

Alternatywnie możesz użyć znacznika \ ALL, który jest znacznie bardziej szczegółowy.

zobacz wyjaśnienie Microsoft DUMPBIN:

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

Przykład (tylko z częścią) treści odsyłanej przez polecenie

Via_fx_24
źródło