Как узнать, какие библиотеки DLL будет загружаться исполняемый файл?


Если у меня есть исполняемый файл Windows, как я могу узнать, какие DLL он будет загружать?

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

8 63

8 ответов:

есть утилиты, которые сделают это для вас.

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

и это тоже:
http://dependencywalker.com/

и, наверное, другие.

dumpbin - это инструмент, который поставляется с VC++.

чтобы увидеть, какие библиотеки DLL, программа будет импортировать:

  • Открыть Visual Studio
  • пункт меню Сервис / Командная строка Visual Studio
  • cd в папку, содержащую исполняемый файл
  • dumpbin / иждивенцы все, что угодно.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

Откройте командную строку и введите следующую команду

tasklist /m / fi "imagename eq netbeans.EXE-файл"

введите вместо netbeans.exe независимо от имени вашего имени exe-файла.

просто перейдите в командную строку и введите tasklist /m вы увидите список DLL файлов, используемые программы.

Dependency Walker может помочь вам определить, какие .dll будет загружен.

решение для Microsoft .Net:

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

есть удобный инструмент под названием NDepend, который даст вам все зависимости DLL.