Тарифы Услуги Сим-карты

Библиотека dll – что это и как ее открыть. Что такое DLL файлы и как они работают

8 ответов

Что такое DLL?

Библиотеки динамических ссылок (DLL) похожи на EXE, но они не являются непосредственно исполняемыми. Они похожи на файлы.so в Linux/Unix. Другими словами, DLL - это реализация разделяемых библиотек MS.

DLL файлы похожи на EXE, что сам формат файла тот же. И EXE, и DLL основаны на формате Portable Executable (PE). DLL могут также содержать COM-компоненты и библиотеки.NET.

Что содержит DLL?

DLL содержит функции, классы, переменные, пользовательские интерфейсы и ресурсы (такие как значки, изображения, файлы,...), которые использует EXE или другая библиотека.

Типы библиотек:

Практически во всех операционных системах существует 2 типа библиотек. Статические библиотеки и динамические библиотеки. В Windows расширения файлов следующие: Статические библиотеки (.lib) и динамические библиотеки (.dll). Основное отличие состоит в том, что статические библиотеки связаны с исполняемым файлом во время компиляции; тогда как динамически связанные библиотеки не связаны до времени выполнения.

Подробнее о статических и динамических библиотеках:

Обычно вы не видите статические библиотеки, хотя на вашем компьютере, потому что статическая библиотека встроена непосредственно внутри модуля (EXE или DLL). Динамическая библиотека представляет собой автономный файл.

DLL может быть изменена в любое время и загружается только во время выполнения, когда EXE явно загружает DLL. Статическая библиотека не может быть изменена после ее компиляции в EXE. DLL можно обновлять индивидуально без обновления самого EXE.

Программа загружает DLL при запуске через Win32 API LoadLibrary или когда это зависимость от другой DLL. Программа использует GetProcAddress для загрузки функции или LoadResource для загрузки ресурса.

Дальнейшее чтение:

Связанные вопросы


Похожие вопросы

Что такое DLL?

DLL файлы - это двоичные файлы, которые могут содержать исполняемый код и ресурсы, такие как изображения и т.д. В отличие от приложений, они не могут выполняться напрямую, но приложение загружает их по мере необходимости (или сразу во время запуска).

Насколько они важны?

Большинство приложений загружают файлы DLL, которые они требуют при запуске. Если какой-либо из них не найден, система вообще не сможет запустить процесс.

DLL файлы могут потребовать другие DLL файлы

Точно так же, как для приложения требуется DLL файл, DLL файл может зависеть от других файлов DLL. Если один из этих DLL файлов в цепочке зависимостей не найден, приложение не загружается. Это легко отлаживается с помощью любых инструментов зависимостей зависимостей, таких как Dependency Walker .

Их так много в системных папках

Большая часть функциональных возможностей системы представлена ​​пользовательской программе в виде файлов DLL, поскольку они являются стандартной формой совместного использования кода/ресурсов. Каждая функциональность хранится отдельно в разных DLL файлах, поэтому загружаются только необходимые файлы DLL и, следовательно, уменьшаются ограничения памяти в системе.

Установленные приложения также используют файлы DLL

DLL файлы также становятся формой разделения функций физически, как объяснялось выше. Хорошие приложения также пытаются не загружать файлы DLL, пока они не будут абсолютно необходимы, что уменьшит требования к памяти. Это также заставляет приложения отправлять много DLL файлов.

DLL Hell

Однако иногда обновления системы часто прерывают другие программы, когда существует несоответствие версии между совместно используемыми файлами DLL и требуемой программой. Системные контрольные точки и кеш-память DLL и т.д. Были инициативами M $для решения этой проблемы. Платформа.NET может не столкнуться с этой проблемой вообще.

Как мы узнаем, что внутри DLL файла?

Вы должны использовать внешний инструмент, например DUMPBIN или Dependency Walker, который не только покажет, какие публично видимые функции (известные как экспорт) внутри DLL файлов, а также какие другие DLL файлы, которые он требует, и которые экспортируют из этих DLL файлов, этот файл DLL зависит от.

Как мы их создаем/используем?

Обратитесь к документации по программному обеспечению от вашего поставщика. Для С++ обратитесь к LoadLibrary в MSDN.

Предположим, вы создаете исполняемый файл, который использует некоторые функции, найденные в библиотеке.

Если используемая библиотека статическая , компоновщик скопирует объектный код для этих функций непосредственно из библиотеки и вставляет их в исполняемый файл.

Теперь, если этот исполняемый файл запущен, он имеет все, что ему нужно, поэтому исполняемый загрузчик просто загружает его в память и запускает его.

Если библиотека динамическая , компоновщик не будет вставлять объектный код, а скорее вставляет заглушку, которая в основном говорит, что эта функция находится в этой DLL в этом месте.

Теперь, если этот исполняемый файл запущен, биты исполняемого файла отсутствуют (например, заглушки), поэтому загрузчик проходит через исполняемый файл, исправляя отсутствующие заглушки. Только после того, как все заглушки будут разрешены, исполняемому файлу будет разрешено работать.

Чтобы увидеть это в действии, удалите или переименуйте DLL и посмотрите, как загрузчик сообщит о недостающей ошибке DLL при попытке запустить исполняемый файл.

Следовательно, имя Динамическая библиотека ссылок , части процесса связывания выполняются динамически во время выполнения исполняемым загрузчиком.

Одно последнее замечание, если вы не подключаетесь к DLL, тогда никакие заглушки не будут вставлены компоновщиком, но Windows по-прежнему предоставляет API GetProcAddress , который позволяет загрузить выполнение DLL после того, как исполняемый файл запущен.

Файлы DLL содержат Таблица экспорта , которая представляет собой список символов, которые могут быть просмотрены вызывающей программой. Символы обычно являются функциями с конвенция вызова C (__ stcall). Таблица экспорта также содержит адрес функции.

С помощью этой информации вызывающая программа может затем вызывать функции внутри DLL, даже если у нее не было доступа к DLL во время компиляции.

DLL (библиотеки динамических ссылок) и SL (разделяемые библиотеки, эквивалентные в UNIX) - это просто библиотеки исполняемого кода, которые могут быть динамически связаны с исполняемым файлом во время загрузки.

Статические библиотеки вставляются в исполняемый файл во время компиляции и фиксируются с этой точки. Они увеличивают размер исполняемого файла и не могут быть разделены.

Динамические библиотеки имеют следующие преимущества:

1/Они загружаются во время выполнения, а не компилируются, поэтому их можно обновлять независимо от исполняемого файла (все эти причудливые окна и диалоговые окна, которые вы видите в Windows, поступают из DLL, поэтому внешний вид вашего приложения может измените, не переписывая его).

2/Поскольку они независимы, код можно разделить на несколько исполняемых файлов - это экономит память, поскольку, если вы используете 100 приложений с одной DLL, в памяти может быть только одна копия DLL.

Их основным недостатком является преимущество # 1 - изменение библиотеки DLL независимо от приложения может привести к тому, что ваше приложение перестанет работать или начнет вести себя причудливо. Версии DLL, как правило, не очень хорошо управляются под Windows, и это приводит к причудливому названию "DLL Hell".

DLL или dynamic-link library это файл с дополнительными ресурсами, которые могут использоваться программами и самой операционной системой. В DLL файлы помещают исполняемый код и другие данные нужные различным программам при их выполнении. Один и тот же DLL файл может использоваться несколькими программами одновременно.

Для того чтобы понять, что такое DLL библиотека рассмотрим пример. В операционной системе есть DLL файл под названием Comdlg32. В нем содержатся ресурсы необходимые для создания диалоговых окон. Различные программы используют DLL файл Comdlg32 для того чтобы создавать диалоговые окна. Таким образом, один и тот же DLL файл обеспечивает нужными ресурсами большое количество программ. Такой подход позволяет экономить место на диске и более эффективно использовать оперативную память.

Использование DLL файлов имеет и другие преимущества. Так с помощью DLL файлов разработчик может создать модульную программу. В исполняемом EXE файле можно разместить только самые необходимые для работы программы ресурсы, а остальное в DLL файлах. А потом во время работы программы подключать только нужные в данный момент DLL файлы. Поскольку не нужные ресурсы не будут загружаться, программа будет работать значительно быстрее. Кроме этого, если программа построена по такому принципу, ее очень просто обновлять. Достаточно внести в изменения только в один DLL файл, а остальные останутся не тронутыми.

В операционной системе Windows также используются файлы.ocx (ActiveX), .cpl (Панель управления), .drv (драйверы). Они имеют такую же структуру и выполняют те же задачи что и DLL библиотеки.

Возможные проблемы с DLL файлами

Самой распространенной проблемой с DLL файлами является их отсутствие. Часто для работы программе нужны DLL файлы, которые распространяются отдельно. Яркий пример DirectX. Наверное, вы часто сталкивались с проблемой, когда программу нельзя запустить из-за отсутствия DLL файла DirectX.

Как правило, эта проблема решается очень просто. Нужно найти в Интернете и скачать файл об отсутствии которого сообщает программа. После этого скопируйте его в папку с игрой, а также в папки Windows и Windows\system32. В большинстве случаев этого достаточно для решения проблемы.

Файлы формата DLL открываются специальными программами. Существует 2 типа форматов DLL, каждый из которых открывается разными программами. Чтобы открыть нужный тип формата, изучите описания файлов и скачайте одну из предложенных программ.

Чем открыть файл в формате DLL

Найти и установить любую недостающую или поврежденную DLL библиотеку поможет программа HELPER.DLL .

В файлах формата DLL содержатся настройки ссылки на различные ресурсы, используемые программой, например, иконки. DLL предназначены исключительно для ОС Windows. На других операционных системах открыть такие файлы можно только с помощью эмуляторов (исключением являются кроссплатформенные приложения для Mac OS). Нужно помнить, что современные программы не поддерживают файлы для 16-ти битной архитектуры.

Меры предосторожности

В большинстве случаев пользователю не требуется открывать файлы формата DLL, поскольку они предназначены исключительно для разработчиков. Редактирование данного файла может негативно сказаться на работоспособности отдельных программ и операционной системы, по этой причине нужно найти файл Dll и сделать его копию.

Программы для открытия файлов DLL

Просмотр исходного кода

Одним из самых распространенных способов, чтобы просмотреть расширение Dll, является . Программа имеет встроенные функции декомпиляции некоторых файлов, поэтому можно заниматься отладкой dll, а главное, она полностью бесплатна. Разумеется, гарантировать корректное отображение кода для всех файлов невозможно.

В качестве альтернативы можно использовать декомпилятор dotPeek . Он также бесплатен, однако способен работать исключительно с программами, написанными на C#.

Настройка интерфейса программы

Для этой цели лучше всего подходит . С помощью данной программы можно легко сменить иконки, диалоги или установить собственную анимацию. К сожалению, программа является платной даже для некоммерческого использования. Следует обратить внимание, что могут возникнуть проблемы с файлами больших размеров (около 1 ГБ и более).

Отладка

Самым простым способом является использование Visual Studio от Microsoft. Это довольно функциональный инструмент, в число возможностей которого входит отладка программы, но поможет он только в случае, если на файле нет защиты.

Если же нужно просто скачать DLL взамен битого файла (или отсутствует Dll), то здесь поможет DLL-helper - полностью бесплатная программа.

Динамические web-страницы

Существует и другой формат DLL - файлы, генерирующие код для сайтов. Такие библиотеки можно открыть в любой удобной среде разработки, например, Visual Studio . Протестировать их в действии поможет браузер. Лучше использовать последние версии популярных обозревателей, в противном случае файл может отображаться некорректно.

Веб-страница, автоматически создающаяся во время доступа пользователя. Может объединять серверные сценарии, такие как Perl или , создающие -код для веб-страниц.

Веб-страницы в файлах расширения DLL чаще всего хранятся на веб-серверах Microsoft IIS. Расширение DLL должно отображаться на соответствующем механизме создания сценариев сервера для корректной обработки страницы.

Файл компилированной библиотеки, содержащий набор процедур и/или драйверов, на которые ссылается и которые выполняются программой. Позволяет различным программам получать доступ к общедоступным системным функциям посредством стандартных библиотек. Может динамически связываться в программе во время ее работы.

Многие файлы DLL(читается ДЛЛ) предоставляются операционной системой Windows, другие входят в состав программ Windows. Они также предоставляют различные программные функции, такие как соединение с внешними устройствами и входным и выходным сигналом жесткого диска. На них также могут ссылаться кросс-платформенные приложения для Mac.

Примечание: удаление или изменение содержимого файла DLL может стать причиной ошибок в работе программы, которая ссылается на файл. Поэтому файлы DLL не стоит открывать или редактировать.

DLL – расширение файлов, которые являются своего рода справочными материалами при выполнении тех или иных программ. Название типа файлов расшифровывется как «библиотека динамической компоновки ». Эти динамические библиотеки могут быть одновременно использованы разными приложениями. В каком-то смысле они также похожи на исполняемые файлы , однако отличаются значением некоторых полей. Самым ярким примером являются файлы драйверов , которые описывают правила взаимодействия устройства и ОС.

Чем открыть DLL

Прежде, чем рассказать, как открывать эти файлы следует обратить внимание пользователя на то, что особого смысла в открытии такого типа библиотек нет. Они содержат в себе информацию необходимую программе для выполнения. Крайне редко в этом типе файлов хранятся важные переменные (а не способ их вызова) или данные. Хотя, справедливости ради, отметим, что есть ряд компаний, которые всё-таки сумели расположить информацию, необходимую для работы программ в dll.

Правда, динамические библиотеки иногда подвергаются декомпилированию для получения хранящихся в них правил и принципов работы. Для этого существует несколько специальных программ .

Достоинством программы также является умение работать с разными типами файловых библиотек и даже редактировать некоторые из них. Но стоит очередной раз повториться – данная информация подана сугубо для ознакомления , стараться изменить файлы с расширением.dll одна из худших идей, что может прийти в голову пользователя.


Есть ли у данной программы достоинства ? Огромное количество – спектр работ, которые можно на ней выполнить ограничен лишь фантазией владельца. А недостаток всего один, но существенный – годовая подписка составляет около 500$.

Способ установки в систему

Но если писать и редактировать библиотеки нам не приходится, как обычным пользователям, то вот знание об их установке может быть полезным. Дело в том, что далеко не все программы снабжаются полным набором необходимых библиотек и подразумевается, что вместе с ними устанавливаются и отдельные компоненты (весьма распространённая деталь при установке игр), которые были забыты пользователем. Тогда требуется устанавливать , а точнее регистрировать файлы dll.

Сперва нужно найти сам файл. Благо, при тщательном поиске это не так уж и сложно и необходимые библиотеки встречаются довольно часто, даже отдельно от пакета, что не мешает их работе. Стоит отметить, что в случае с играми это бывают d3dx.dll которые могут отсутствовать в системе – в этом случае лучше установить пакет DirectX, а не ставить 150 библиотек вручную.

Но если нужно регистрировать новый dll для запуска программы, то лучше поместить его в каталог с программой. В ОС Windows 7 и выше присутствует возможность открытия командной строки из каталога, в иных же случаях предстоит открыть командную строку и используя команду cd добраться в нужный каталог.

Для указанных же версий ОС достаточно открыть нужный каталог и зажав шифт клацнуть по пустому месту правой кнопкой мыши . В ответ перед нами всплывёт контекстное меню, следующего вида:

Нажимаем на «открыть окно команд ». Перед нами появится командная строка, где нам нужно прописать следующее:

regsvr32 dllname.dll

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

regsvr32 — u dllname.dll

Важно отметить , что dllname.dll введено для примера и вместо всего, что написано слева от точки (то есть вместо dllname) следует вводить название вашего файла. На изображении показано добавление в ОС Windows 10 dll файла от directX8.

Таким нехитрым образом можно установить библиотеку в систему. Однако если наблюдаются малейшие сбои или ошибки, то следует сразу же выполнить другую команду, убрать регистрацию, а с проблемной программой обратиться к специалисту.

И IBM OS/2; динамическая библиотека, позволяющая многократное применение различными программными приложениями. K DLL относятся также элементы управления ActiveX и драйверы. В мире UNIX аналогичные функции выполняют т. н. shared objects («разделяемые объекты»).

Формат файлов DLL придерживается тех же соглашений, что и формат исполняемых файлов, сочетая код, таблицы и ресурсы.

Цели введения DLL

Первоначально предполагалось, что введение DLL позволит эффективно организовать память и дисковое пространство, используя только один экземпляр библиотечного модуля для различных приложений. Это было особенно важно для ранних версий Microsoft Windows с жёсткими ограничениями по памяти.

Далее, предполагалось улучшить эффективность разработок и использования системных средств за счёт модульности. Замена DLL-программ с одной версии на другую должна была позволить независимо наращивать систему, не затрагивая приложений. Кроме того, библиотеки DLL могли использоваться разнотипными приложениями - например, Microsoft Office, Microsoft Visual Studio и т. п.

В дальнейшем идея модульности выросла в концепцию COM.

Фактически, полных преимуществ от внедрения DLL получить не удалось по причине явления, называемого DLL hell («ад DLL»). DLL Hell возникает, когда несколько приложений требуют одновременно различные, не полностью совместимые, версии DLL-библиотек, что приводит к сбоям в этих приложениях. Когда система выросла до определённых размеров, количество DLL стало превышать многие тысячи, не все из них обладали полной надёжностью и совместимостью, и конфликты типа DLL Hell стали возникать очень часто, резко понижая общую надёжность системы. Поздние версии Microsoft Windows стали разрешать параллельное использование разных версий DLL, что свело на нет преимущества изначального принципа модульности. Использование разных версий Dll стало возможным благодаря файлу манифеста (manifest), который хранится в ресурсах приложения или в виде отдельного файла в одном с приложением каталоге.

Примеры использования DLL в разных языках

Экспорт в DLL

Delphi

library Example; { Производим некие действия и возвращаем результат } function AddNumbers(a, b: Double): Double; cdecl; begin AddNumbers:= a + b end; { Эта функция экспортируется } exports AddNumbers; { Инициализатор DLL, аналог функции main() в языках C и C++ } begin end.

C и C++

#include #define DLLEXPORT extern "C" __declspec(dllexport) // extern "C" обозначает использование простой генерации // сигнатуры функции (в стиле языка С) при получении объектных // файлов. В частности, это запрещает компилятору C++ // производить "декорацию" (или "украшение") имени функции // дополнительными символами при экспорте в DLL /* Эта функция экспортируется */ DLLEXPORT double AddNumbers(double a, double b) // Прототип функции (функция без тела). По данной заявленной сигнатуре функции поиск её тела // при линковке будет произведён ниже или в другом бинарном файле; /* Инициализационная функция DLL, аналог main() */ bool APIENTRY DllMain(HANDLE hModule, DWORD dwReason, LPVOID lpReserved) { return TRUE; } /* Тело (реализация) заявленного выше прототипа функции. Производит некие действия и возвращает результат */ DLLEXPORT double AddNumbers(double a, double b) { return a + b; }

Импорт из DLL

Delphi

program Example; {$APPTYPE CONSOLE} { Указываем, что функция находится в DLL } function AddNumbers(a, b: Double): Double; cdecl; external "Example.dll"; { Используем функцию как обычно } var result: Double; begin result:= AddNumbers(1, 2); Writeln("The result was: ", result) end.

C и C++

#include /* * Указываем, что тело функции находится в другом файле. * Не забыть про объектный модуль DLL при линковке! */ extern "C" __declspec(dllimport)double AddNumbers(double a, double b); /* Используем функцию как обычно */ int main(int argc, char **argv) { double result = AddNumbers(1, 2); printf("The result was: %f\n", result); return 0; }

Подгрузка и импорт из DLL во время работы

Delphi

program Example; {$APPTYPE CONSOLE} var result: Double; LibHandle: Hmodule; AddNumbers: function(a, b: Double): Double; begin LibHandle:= LoadLibrary("Example.dll"); // загружаем DLL if LibHandle <> 0 then begin @AddNumbers:= GetProcAddress(LibHandle, "AddNumbers"); // запоминаем адрес // необходимой функции if @AddNumbers <> nil then begin result:= AddNumbers(1, 2); // используем функцию Writeln("The result was: ", result); end; FreeLibrary(LibHandle); // выгружаем DLL end; end.

C и C++

#include #include /* * Тип используемой функции * (комбинация типов параметры и возвращаемого значения) */ typedef double (*importFunction)(double, double); int main(int argc, char **argv) { importFunction addNumbers; double result; /* Загружаем DLL в память */ HINSTANCE hinstLib = LoadLibrary("Example.dll"); if (hinstLib == NULL) { printf("ERROR: unable to load DLL\n"); return 1; } /* Получаем указатель на функцию */ addNumbers = (importFunction)GetProcAddress(hinstLib, "AddNumbers"); if (addNumbers == NULL) { printf("ERROR: unable to find DLL function\n"); return 1; } /* Вызываем функцию через указатель */ result = addNumbers(1, 2); /* * Выгружаем DLL (в принципе, это будет сделано * автоматически при выходе из программы) */ FreeLibrary(hinstLib); /* Отображаем результат */ printf("The result was: %f\n", result); return 0; }

Уязвимости в механизмах DLL

Уязвимость заключается в том, что многие программы при вызове функции LoadLibrary() не проверяют корректность пути, по которому эта библиотека может быть загружена. Таким образом, они позволяют произвести подмену выполняемой библиотеки. Это связано с тем, что поиск загружаемой библиотеки осуществляется в первую очередь в директории, содержащей образ исполняемого файла, который породил процесс (подмененная библиотека выполняется с привилегиями пользователя, запустившего процесс).