qaa-engineer.ru > Вопросы и ответы > Как узнать список библиотек, которые используются программой(бинарём)?Какие библиотеки использует программа?
Когда вы пишете программу, вы, скорее всего, используете какие-то библиотеки, чтобы сделать вашу работу проще и ускорить процесс разработки. Но как узнать, какие библиотеки использует программа? В этой статье мы расскажем, как это сделать.
Определение библиотек, используемых программой, можно выполнить с помощью различных инструментов. Мы обсудим два наиболее распространенных инструмента — ldd и nm.
Ldd — это утилита командной строки, которая показывает, какие библиотеки использует исполняемый файл. Она работает на большинстве операционных систем, включая Linux, macOS и Windows.
Для использования ldd нужно выполнить следующую команду в терминале:
В результате вы увидите список всех библиотек, используемых программой. Вот пример вывода для простейшего C-программы, которая использует стандартную библиотеку:
все нужные библиотеки Windows для работы программ и игр
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f3cf4c5d000)
/lib64/ld-linux-x86-64.so.2 (0x00007f3cf509f000)
Этот вывод означает, что программа использует glibc (GNU C Library) и ld-linux-x86-64.so.2, которые необходимы для загрузки программы.
NM — это другая утилита командной строки, которая может помочь в определении используемых библиотек. Она работает только на системах Linux и macOS.
NM используется для просмотра содержимого исполняемого файла или библиотеки, в том числе для просмотра списка символов (т.е. функций и переменных), определенных в файле.
Для использования NM нужно выполнить следующую команду:
В результате вы увидите список всех символов, определенных в файле, включая имена функций и переменных. Если программа использует внешние библиотеки, вы можете найти имя библиотеки в списке символов и узнать, какие функции или переменные она экспортирует.
Например, если вы запустите nm на программе, которая использует CURL (библиотека для работы с протоколом HTTP), вы можете увидеть что-то вроде этого:
0000000000000000 T main
U curl_easy_cleanup
U curl_easy_init
U curl_easy_perform
….
В этом примере вы можете видеть, что программа использует функции curl_easy_cleanup, curl_easy_init и curl_easy_perform из библиотеки CURL.
Приемы для упрощения
Если программа использует множество библиотек, то вывод команды ldd может быть очень длинным и труднопонятным. Чтобы упростить вывод, вы можете использовать ключ -v для получения более подробной информации.
ldd -v /path/to/executable
Вы также можете использовать grep для поиска определенных библиотек или символов.
Например, если вы хотите найти все библиотеки, содержащие lib в названии, вы можете выполнить следующую команду:
ldd /path/to/executable | grep lib
Аналогично, если вы хотите найти конкретный символ в списке символов, вы можете выполнить следующую команду:
Набор системных библиотек для компьютера
nm /path/to/executable | grep symbol_name
Как вы можете видеть, определение библиотек, используемых программой, не является сложной задачей. Библиотеки, которые использует программа, могут помочь вам написать код быстрее и сделать его более эффективным. Поиск и использование подходящих библиотек может ускорить процесс разработки и сделать вашу программу лучше.
Похожие записи:
- Как узнать, какие библиотеки использует программа в Linux?
- Как узнать, как много памяти использует программа в C/C++?
- java: как узнать, сколько памяти использует программа?
- как передать в метод main как аргументы путь к файлам которые были выделены (в виндовс-> в папке-> мышю) и запушены(ENTER) моей программой по дефолту
- Почему не работает программа ? Данная программа предназначена для вывода значений уровня владения иностранным языком на консоль с помощью Enum
Источник: qaa-engineer.ru
Как узнать какие библиотеки использует программа windows
Если у меня есть исполняемый файл Windows, как я могу узнать, какие DLL он будет загружать?
Я просто говорю о том, какие из них будут загружены статически, а не те, которые он может загружать динамически с чем-то вроде LoadLibrary.
8 ответов
команду 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 для /М /центр «имя_образа эквалайзер в NetBeans.EXE-файл»
введите вместо netbeans.exe любое имя вашего exe-файла.
просто перейдите в командную строку и введите tasklist /m вы увидите список DLL файлов, используемые программы.
решение для Microsoft .Net:
foreach (AssemblyName a in Assembly.ReflectionOnlyLoadFrom(«SAMPLE.EXE»).GetReferencedAssemblies())
есть удобный инструмент под названием NDepend, который даст вам все зависимости DLL.
Приветствую всех! Сегодня я покажу как можно узнать какие DLL библиотеки использует та или иная загруженная программа. Это может быть очень важно если вы владелец какого то игрового сервера, и вам необходимо встраивать части проверки в модификацию игр, на основе инъекций. Так же может быть полезно, тем кто хочет узнать какая из программ использует занятую библиотеку. И так рассмотрим сам код:
public static void UnloadModule2 ( string moduleName )
System . Diagnostics . Process [ ] local_procs = System . Diagnostics . Process . GetProcesses ( ) ; //получаем список всех процессов
Process target_proc = local_procs . First ( p = > p . ProcessName == «Name_My_Programm» ) ; //Выбираем из этого списка нашу программу
ProcessModuleCollection modules = target_proc . Modules ; //Получаем коллекция модулей использующие нашу программу
foreach ( var dll in modules ) //Производим перебор коллекции
ProcessModule prDll = ( ProcessModule ) dll ; //Делаем upcast
if ( prDll . ModuleName == moduleName ) //Сравниваем имя модуля который хотим найти
Console . WriteLine ( «Модуль найден « + prDll . ModuleName ) ;
Я закомментировал весь код, думаю сложностей с пониманием его не возникнет.
Так же вам стоит взглянуть вот на эту статью где я смог вывести список всех инжектированных dll ссылка
I have a 3rd party application that doesn’t come with an installer. It’s a very small exe, a simulator.
Anyhow, it crashes on startup due to some missing libraries. But the error doesn’t tell me which ones. Is there an application on windows that tells me which libraries are going to be loaded at program load time?
asked Nov 22, 2009 at 19:46
It’s been a few years since i’ve used it but Dependency Walker got me through a lot of DLL hell.
Also, Process Explorer is a great and fast way to see what DLLs are loaded by an EXE on a test machine… for comparison purposes when hunting down missing DLLs.
answered Nov 22, 2009 at 19:49
Paul Sasik Paul Sasik
78.4k 20 gold badges 149 silver badges 188 bronze badges
Only a partial answer: DEPENDS.EXE tells you what dlls a dll needs. I think it works for EXE’s too.
answered Nov 22, 2009 at 19:49
14.4k 6 gold badges 30 silver badges 38 bronze badges
I have a 3rd party application that doesn’t come with an installer. It’s a very small exe, a simulator.
Anyhow, it crashes on startup due to some missing libraries. But the error doesn’t tell me which ones. Is there an application on windows that tells me which libraries are going to be loaded at program load time?
asked Nov 22, 2009 at 19:46
It’s been a few years since i’ve used it but Dependency Walker got me through a lot of DLL hell.
Also, Process Explorer is a great and fast way to see what DLLs are loaded by an EXE on a test machine… for comparison purposes when hunting down missing DLLs.
answered Nov 22, 2009 at 19:49
Paul Sasik Paul Sasik
78.4k 20 gold badges 149 silver badges 188 bronze badges
Only a partial answer: DEPENDS.EXE tells you what dlls a dll needs. I think it works for EXE’s too.
answered Nov 22, 2009 at 19:49
14.4k 6 gold badges 30 silver badges 38 bronze badges
← →
Franzy
Написал прогу, на моем компе нормально работает, принес на комп, где дельфи нет и никогда не стояло, пробую запустить, выдает сообщение, что требуется такая-то библиотека. В связи с чем вопрос, а точнее целых два:
1) Можно ли сделать так, чтобы при компиляции весь код из таких библиотек компилировался в основную прогу, т.е. чтобы эти длл-ки не требовались
2) Если нет, то как узнать, какие библиотеки может потребовать прога, чтобы распространять их вместе с прогой?
> Если нет, то как узнать, какие библиотеки может потребовать
> прога, чтобы распространять их вместе с прогой?
procedure TForm1.Button1Click(Sender: TObject);
begin
GetAllProcesses2;
end;
Вот это поставь — все покажет
http://rouse.drkb.ru/winapi.php#propsheet
← →
Franzy
Попробовал tdump с параметром -em, выело список в котором — внимание — НЕТ той длл, на отсутствие которой ругалась ось (dforrt.dll). Т.е. метод ненадежный.
Попробую прогу от Rouse.
Запускаем программу под средой, приходим на BreakPoint, лезем в меню View — и где-то там видим пункт, который показывает список статически загруженных DLL. А загружаемые ручками мы и так знаем.
> Franzy (22.04.2009 13:51:04) [4]
Данная задача решения не имеет.
> Написал прогу, на моем компе нормально работает, принес
> на комп, где дельфи нет и никогда не стояло
> НЕТ той длл, на отсутствие которой ругалась ось (dforrt.
> dll).
эта DLL к Delphi не относится
← →
Franzy
Есть подозрение, что используемая длл тоже какие-то свои длл использует…
← →
Franzy
Да, так и есть. tdump длл-ки показал, что она обращается к этой самой dforrt.dll. А еще к какой-то MSVCRT.dll:
IMPORT: MSVCRT.dll=.»malloc»
IMPORT: MSVCRT.dll=.»_adjust_fdiv»
IMPORT: MSVCRT.dll=.»_initterm»
IMPORT: MSVCRT.dll=.»free»
Это родная виндовская или тоже какая-то левая?
> Это родная виндовская или тоже какая-то левая?
MicroSoft VisualC Run-Time library
Родство с этим модулем у «винды» того же колена, что и родство Делфи-приложений с можулем rtlXX.bpl
← →
Franzy
Так она родная для винды или нет? Или тоже из вижл студио?
она родная не для винды, а для тех ее компонентов, которые разрабатывались с использованием MSVC (VC — это не VisualStudio, а VisualC)
> Franzy (23.04.2009 13:38:09) [9]
Левая — MicroSoft VC RunTime
← →
Franzy
Т.е. она есть не везде и ее тоже надо включать вместе с dforrt.dll в комплект с экзишником?
Не надо.
Модуль поставляется штатно в составе дистрибутива, без него невозможна работа огромной кучи штатно поставляемого в составе ОС прикладного софта.
> Franzy (23.04.09 15:17) [16]
>
> Т.е. она есть не везде и ее тоже надо включать вместе с
> dforrt.dll в комплект с экзишником?
Если нужна MSVCRT.dll, то разумнее в процессе установки программы поставить еще м Microsoft Visual C++ 2008 Redistributable, ну или другой версии.
> Это родная виндовская или тоже какая-то левая?
Источник: uralsib-cabinet.ru
Как узнать, какие DLL загружает исполняемый файл?
Если у меня есть исполняемый файл Windows, как я могу узнать, какие библиотеки он загрузит? Я просто говорю о том, какие из них будут загружаться статически, а не о тех, которые могут загружаться динамически с помощью чего-то вроде LoadLibrary.
Создан 23 янв.
David Norman
10 ответы
Есть утилиты, которые сделают это за вас. Раньше я использовал инструмент MS (depends.exe), который, как мне кажется, поставлялся с VB .:
VS2010 VS2012 VS2013 VS2015 Текущий и вот это тоже:
http://dependencywalker.com/ и, возможно, другие.
Создан 13 фев.
Файл «depends.exe», устанавливаемый вместе с Visual Studio / VB / . и «зависимый.exe», который можно загрузить с сайт зависимостей.com точно такой же инструмент (только разные версии). 😉 — Пол Грок
Ссылка мертвая. — ice1000
- Откройте Visual Studio
- Пункты меню Инструменты | Командная строка Visual Studio
- cd в папку, содержащую исполняемый файл
- dumpbin / иждивенцы Any.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
Я считаю, что это должно быть: dumpbin / иждивенцы Any.exe — бай
/ зависимые показывает вам только библиотеки DLL. / import показывает вам функции и DLL. — Грэм Перроу
Это лучший ответ. К сожалению, этот инструмент показывает только библиотеки DLL, загруженные непосредственно для .exe не библиотеки DLL, исполняемый файл которых зависит от них косвенно. — СуБ
Откройте командную строку и введите команду ниже
список задач / m / fi «Imagename eq netbeans.exe»
Вместо этого введите netbeans.exe под любым именем вашего exe-файла.
ответ дан 05 мая ’15, 12:05
Я использовал это, и он не дает мне полного списка DLL, которые он использует, есть куча DLL crystalreports, которые использует мой exe, но я не вижу ничего, упомянутого в списке, напечатанном с помощью этой команды. Любые идеи? — user734028
Просто зайдите в командную строку и введите tasklist /m , вы увидите список DLL-файлов, используемых конкретной программой.
ответ дан 12 мар ’12, в 10:03
Да, это делает то, что вы говорите, однако, если исполняемый файл запускает несколько процессов, вы никогда не узнаете из командной строки, какой процесс был запущен исполняемыми файлами, поэтому вы не будете знать все зависимые DLL исполняемого файла. — Fazi
Зависимость Уокер может помочь вам определить, какая DLL будет загружена.
Хорошая программа с графическим интерфейсом. Dependency Walker попробуйте найти библиотеки DLL и их иерархические зависимости. — СуБ
Решение для Microsoft .Net:
foreach (AssemblyName a in Assembly.ReflectionOnlyLoadFrom(«SAMPLE.EXE»).GetReferencedAssemblies())
ответ дан 30 мая ’12, 16:05
Это решение не включает справочные библиотеки DLL, которые требуются от его дочерних элементов. — Программист DotNet
Существует удобный инструмент под названием NDepend, который предоставит вам все зависимости DLL.
NDepend это инструмент статического анализа для управляемого кода .NET ». Так что это работает только для приложений .Net. — СуБ
Вы забыли упомянуть, что он работает как расширение vs. — Хосуэ Затараин Эспиноса
Преимущества: позволяет исследовать уже запущенный процесс (я не нашел, как подключить обходчик зависимостей к существующему процессу)
Зависимости — современный Dependency Walker с открытым исходным кодом показывает, какие библиотеки DLL загружает исполняемый файл Windows, и он хорошо работает в современной Windows 10.
Он немного менее мощный, чем Зависимость Уокер, но последний может работать или не работать в Windows 10, поскольку последний раз он обновлялся в 2006 году. (Более новые версии Dependency Walker были включены в некоторые версии Windows Development Kit для Windows 10, но не больше.)
Не тот ответ, который вы ищете? Просмотрите другие вопросы с метками dll executable or задайте свой вопрос.
ADV
Последние вопросы
Связанные теги
stackovergo.com 2020–2023, под лицензией куб.см по-са 3.0 с указанием авторства. | Персональные данные | Cookies политики
Источник: stackovergo.com