¿Cuál es el equivalente del ldd de Linux en Windows?

Respuestas:

53

Aquí está Dependency Walker.

http://dependencywalker.com/

Daniel A. White
fuente
5
¿Existe algo como ldd, solo para la línea de comandos? Buscando algo que pueda usar desde un mensaje. Prefiera un comando ligero pequeño, preferiblemente sin DLL adicionales.
JM Becker
2
Parece que tiene una interfaz de línea de comandos: dependencywalker.com/help/html/hidr_command_line_help.htm
Daniel A. White
3
La sintaxis se parece a esto: depende.exe / c /oc:dependencies.csv /ot:dependencies.txt mydll.dll
Boinst
3
Dependency Walker funciona bien, pero es un cambio discordante con respecto a la simplicidad de ldd (especialmente si está acostumbrado a programar una herramienta que consume su salida y hace, digamos, tareas de empaquetado automáticamente con ella).
zxq9
2
Se bloquea en Windows 10.
mikemaccana
42

El dumpbincomando puede ser útil para muchas cosas, aunque en este caso el walker de dependencias probablemente sea un poco más detallado.

dumpbin /dependents some.dll

Salida de ejemplo:

C: \ Archivos de programa (x86) \ Microsoft Visual Studio \ 2017 \ Community \ Team Tools \ Static Analysis Tools> dumpbin / dependientes StanPolicy.dll

Volcado del archivo StanPolicy.dll

Tipo de archivo: DLL

La imagen tiene las siguientes dependencias:

mscoree.dll

Resumen

    2000 .reloc
    2000 .rsrc
   1E000 .text
David St Denis
fuente
5
Esta es la mejor opción si tiene instalado Visual Studio.
sakra
36

o la herramienta GNU:

i586-mingw32msvc-objdump -p  *.exe    | grep 'DLL Name:'
RzR
fuente
1
¿Se puede usar objdump para mostrar la ruta completa? Necesito algo de forma recursiva y esto requiere una ruta completa para cada DLL dependiente
INS
3
objdump solo muestra lo que contiene el archivo. No intenta realizar ninguna búsqueda de ruta como lo lddhace.
jørgensen
26

PowerShell puede hacer esto

PS> Proceso de inicio -PassThru calc.exe | Get-Process -Module

   Tamaño (K) ModuleName
   ------- ----------
       908 calc.exe
      1700 ntdll.dll
      1148 kernel32.dll
       432 KERNELBASE.dll
     13856 SHELL32.dll
           ...
Steven Penny
fuente
6
Esto parece funcionar solo en la medida en que el programa realmente encuentre dlls; en caso de falla, la lista está incompleta.
01d55
12

Si está usando wineWindows y no es real, puede usar WINEDEBUG=+loaddll wine <program>.

Janus Troelsen
fuente
7
Desarrollar contra Wine para apuntar a Windows me pareció una idea tan extraña que tuve que intentarlo (principalmente apunto a Linux) ... y en realidad está funcionando mucho más fluido de lo que esperaba para la creación de prototipos. Muy muy genial.
zxq9
Re: desarrollo usando Wine en lugar de Windows: tenga en cuenta que lo que funciona en Wine no necesariamente funcionará en Windows real. Aprendí esto cuando olvidé llamar GdiplusStartup, y GDI + funcionó sin problemas en Wine, mientras que en Windows no. Solo noté este error después de haber depurado el programa en Wine, y luego intenté ejecutarlo en Windows.
Ruslan
8

Ahora hay un lddCygwin. Si tiene una versión Cygwin muy antigua, tendrá que usar cygcheck.

Janus Troelsen
fuente
Sí, pero no es muy preciso
Stef
8

Supongo que la forma de desarrollador de Windows para hacer esto es usar dumpbin /dependents source.exe. Si tiene instalado Visual Studio se puede encontrar aquí: C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\dumpbin.exe.

JohnnyDeBF
fuente
3
Lástima que esto no muestra dónde se encuentran los dependientes para que pueda ver con precisión cuáles se usan realmente en tiempo de ejecución :(.
rubenvb
@rubenvb Process Explorer de SysInternals MS suite tiene una vista del panel inferior de todas las DLL y cargas binarias, incluidas sus rutas y búsqueda de símbolo / dll.
kevinf
7

Las versiones más nuevas de Git en Windows vienen empaquetadas con algo llamado Git BASH , que emula muchos comandos útiles de Unix, incluido ldd.

Parece que solo informa las bibliotecas que se pueden encontrar. Entonces, puede usar esto para obtener una descripción general de dónde se encuentran las bibliotecas utilizadas, pero no cuáles faltan.

Machta
fuente
0

Para Windows 10, con Visual Studio 2017, voy a la barra de búsqueda de Windows y escribo:

"Símbolo del sistema para desarrolladores para VS 2017" (un cmd.exe especial para desarrolladores de Visual Studio)

Esto permite obtener acceso a DUMPBIN que debe usarse con la etiqueta \ IMPORTS. Por ejemplo, en el directorio correcto:

DUMPBIN \ IMPORTS yourfile.exe (otras extensiones también pueden funcionar)

Para mí, esta lista la DLL y las funciones utilizadas.

Alternativamente, puede usar la etiqueta \ ALL que es mucho más detallada.

vea la explicación de microsoft de DUMPBIN:

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

Ejemplo (con solo una parte) del contenido devuelto por el comando

Via_fx_24
fuente