Як дізнатись, які DLL завантажується виконуваний файл?


75

Якщо у мене є виконуваний файл Windows, як я можу дізнатись, які dll-файли він буде завантажувати?

Я просто говорю про те, які будуть завантажуватися статично, а не ті, які вони можуть динамічно завантажувати щось на зразок LoadLibrary.

Відповіді:


35

Є комунальні служби, які зроблять це за вас.

Раніше я використовував інструмент MS (залежить.exe), який постачався з (я думаю) VB .:
https://msdn.microsoft.com/en-us/library/8kche8ah.aspx

а є і це:
http://dependencywalker.com/

і, можливо, інші.


7
Файл "depend.exe", який інстальовано з Visual Studio / VB / ..., і файл "depend.exe", який можна завантажити з dependencywalker.com, є абсолютно однаковим інструментом (лише різні версії). ;)
Paul Groke

2
Посилання мертве.
ice1000

58

dumpbin - це інструмент, який постачається з VC ++.

Щоб побачити, які бібліотеки DLL програма імпортує:

  • Відкрийте Visual Studio
  • Пункт меню Інструменти | Командний рядок Visual Studio
  • cd до папки, що містить виконуваний файл
  • звалище / утриманці whatever.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

Щоб побачити, які функції (і бібліотеки DLL) він буде імпортувати, використовуйте

C:\> dumpbin /imports whatever.exe

5
Я вважаю, що це повинно бути: dumpbin / dependents whatever.exe
baye

4
/ dependents показує лише бібліотеки DLL. / import показує вам функції та бібліотеки DLL.
Graeme Perrow

1
Це найкраща відповідь. На жаль, цей інструмент показує лише бібліотеки DLL, завантажені безпосередньо для тих .exeбібліотек, які не є бібліотеками, від яких виконуваний файл залежить опосередковано.
Суб 02

15

Відкрийте командний рядок і введіть нижче команди

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

Натомість введіть netbeans.exe, незалежно від імені вашого файлу exe.


1
Я використовував це, і він не давав мені повного списку DLL, які він використовує, є купа DLL CrystalReports, які використовує мій exe, але я не бачу жодного згаданого у списку, надрукованого за допомогою цієї команди. Будь-які ідеї?
користувач734028

12

Просто перейдіть до командного рядка та введіть tasklist /m, і ви побачите список dll-файлів, що використовуються конкретною програмою.


Так, це робить те, що ви говорите, однак, якщо виконуваний файл запускає кілька процесів, ви ніколи не дізнаєтесь із командного рядка, який процес був запущений виконуваними файлами, отже, ви не будете знати всіх залежних dll-файлів виконуваного файлу.
Фазі

Не завантажує контури.
Жозуе Затарайн Еспіноса

11

Залежність Walker може допомогти вам визначити, який .dll буде завантажено.


Приємна програма графічного інтерфейсу. Dependency Walkerспробуйте знайти бібліотеки DLL та їх ієрархічні залежності.
Суб 02

3

Рішення для Microsoft .Net:

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


1

Існує зручний інструмент під назвою NDepend, який надасть вам усі залежності DLL.


NDependє засобом статичного аналізу для керованого коду .NET ' . Отже, це працює лише для додатків .Net.
Суб 02

Ви забули згадати, що він працює як розширення проти.
Josué Zatarain Espinosa

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.