Какие dll использует программа

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

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

автор: David Norman

8 ответов

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

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

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

автор: gkrogers

команду 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) он будет импортировать, используйте

Динамически загружаемые библиотеки (DLL)


C:> dumpbin /imports whatever.exe
автор: Graeme Perrow

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

tasklist для /М /центр «имя_образа эквалайзер в NetBeans.EXE-файл»

введите вместо netbeans.exe любое имя вашего exe-файла.

автор: LOKESH

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

автор: Subek Shakya

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

Источник: askdev.ru

Какие dll использует программа

При попытке обновить «на лету» библиотеку в GAC получил сообщение об ошибке, что у меня нет доступа к библиотеке, ибо она занята другим приложением. Нужно было срочно узнать, что именно «держит» dll-ку.

Читайте также:
Программа эркипер для общепита описание

Чтобы узнать, какой процесс блокирует доступ к библиотеке, можно вопользоваться консольной версией диспетчера задач, который называется tasklist. Для этого нужно в консоли ввести следующую команду:

tasklist /m название_библиотеки.dll

В результате работы будет выведен список тех процессов, которые используют вашу библиотеку. Остаовив их, вы сможете «освободить» библиотеку и сделать то, что хотели – обновить, удалить или еще что.

Пример команды:

tasklist /m Insiders.dll

Результат работы:

tasklist

На скриншоте видно, что процесс библиотека используется IIS и таймером SharePoint.

Источник: markimarta.ru

Я БЫЛ НЕ ПРАВ? BOOSTER X РАБОТАЕТ? — ПЕРЕПРОВЕРКА ОПТИМИЗАЦИИ WINDOWS 10/11 от IOSIPH!

Как узнать, какие dll использует процесс?

Опираясь на это,хочу получить список dll, которые использует каждый процесс. Я использую stl list, где каждая нода имеет вот такие поля:

struct info < wchar_t name_PID[100]; // the name of process //maybe DWORD not unsigned unsigned num_PID; // the id of the proc char* path;// the way like C:// char par_name[100]; // the name of parent unsigned num_par_PID;// the id of the parent char ownerName[256]=»»; // host/adm/elv char* SID; unsigned x_bit; //bool DEP; char DEP[4]; //bool ASLR; char ASLR[4]; >;

На момент выполнения этой функции(которая ищет dll у процесса), все представленные поля заполнены. Вот так выглядит вариант из документации Microsoft:

int main( void ) < DWORD aProcesses[1024]; DWORD cbNeeded; DWORD cProcesses; unsigned int i; // Get the list of process identifiers. if ( !EnumProcesses( aProcesses, sizeof(aProcesses), // Calculate how many process identifiers were returned. cProcesses = cbNeeded / sizeof(DWORD); // Print the names of the modules for each process. for ( i = 0; i < cProcesses; i++ ) < PrintModules( aProcesses[i] ); >return 0; >
По аналогии и я пишу свою функцию:
void about_dll(list list ::iterator lit; DWORD* mass; DWORD cbNeeded, cProcesses; mass = (DWORD*)malloc(1*sizeof(DWORD)); int i = 0; for (lit = gqlist.begin(); lit != gqlist.end(); ++lit) < mass[i] = lit->num_PID; mass = (DWORD*)realloc(mass, sizeof(DWORD)*(i + 2)); i++; > int k = 0; EnumProcesses(mass, sizeof(mass)*i, // Calculate how many process identifiers were returned. cProcesses = cbNeeded / sizeof(DWORD); for (i = 0; i < cProcesses; i++) < //PrintModules(aProcesses[i]); about_dll2(mass[i]); >>

Читайте также:
Как попасть в программу по строительству дома

Я пробегаю по каждому элементу списка, чтобы записать в новый массив mass (который динамический) номер процесса. Это нужно для функции EnumProcesses , которая после исполнения изменит содержимое cbNeeded . Его я использую, для цикла (ровно как и в примере). В документации вызывают из цикла функцию(в их примере из сайта):

int PrintModules( DWORD processID ) < HMODULE hMods[1024]; HANDLE hProcess; DWORD cbNeeded; unsigned int i; // Print the process identifier. printf( «nProcess ID: %un», processID ); // Get a handle to the process. hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processID ); if (NULL == hProcess) return 1; // Get a list of all the modules in this process. if( EnumProcessModules(hProcess, hMods, sizeof(hMods), for ( i = 0; i < (cbNeeded / sizeof(HMODULE)); i++ ) < TCHAR szModName[MAX_PATH]; // Get the full path to the module’s file. if ( GetModuleFileNameEx( hProcess, hMods[i], szModName, sizeof(szModName) / sizeof(TCHAR))) < // Print the module name and handle value. _tprintf( TEXT(«t%s (0x%08X)n»), szModName, hMods[i] ); >> > // Release the handle to the process. CloseHandle( hProcess ); return 0; >
Теперь и я вызываю about_dll2 каждый раз из цикла.
void about_dll2(DWORD processID) < HMODULE hMods[1024]; HANDLE hProcess; DWORD cbNeeded; unsigned int i; hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, false, processID); // Get a list of all the modules in this process. if (NULL == hProcess) return; //GetModuleHandleExA(NULL, «chrome.exe», hMods); if (EnumProcessModules(hProcess, hMods, sizeof(hMods), for (i = 0; i < (cbNeeded / sizeof(HMODULE)); i++) < TCHAR szModName[MAX_PATH]; // Get the full path to the module’s file. if (GetModuleFileNameEx(hProcess, hMods[i], szModName,sizeof(szModName) / sizeof(TCHAR))) < // Print the module name and handle value. _tprintf(TEXT(«t%s (0x%08X)n»), szModName, hMods[i]); >> > >

  1. Не всегда hProcess получает валидное значение — соответственно завершаю функцию на этой итерации.
  2. if( EnumProcessModules(hProcess, hMods, sizeof(hMods), https://ru.stackoverflow.com/questions/1025576/%D0%9A%D0%B0%D0%BA-%D1%83%D0%B7%D0%BD%D0%B0%D1%82%D1%8C-%D0%BA%D0%B0%D0%BA%D0%B8%D0%B5-dll-%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D1%83%D0%B5%D1%82-%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81″ target=»_blank»]ru.stackoverflow.com[/mask_link]
Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru