Как разобрать dll файл на языке c

Обновлено: 05.07.2024

Ещё во-времена старушки дос стало очевидно, что некоторые программные модули лучше хранить не внутри исполняемого файла, а вынести их наружу и подгружать по мере необходимости. В то время такие "прицепы" называли оверлеями и с точки зрения экономии 1М-байтного адресного пространства это было разумно – одну большую программу кромсали на мелкие части, и эти части отрабатывали в памяти по очереди. Подобная техника докатилась и до наших дней, только теперь это динамически подгружаемые DLL.

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

"Dynamic Link Library" или DLL – это часть исполняемого РЕ-файла в виде внешнего модуля. Он оформлен как ларчик с N-нным количеством уникальных для наших программ функций, которых нет в составе системных Win32-API. Программный экзо-скелет динамических библиотек идентичен исполняемым файлам экзе, однако есть и некоторые нюансы:

Система предоставляет нам два способа подключения DLL к своим проектам – статический и динамический . В первом случае мы подключаем библиотеку и указываем импортируемые из неё функции на этапе компиляции РЕ-файла, и эти функции сразу загружаются в наше адресное пространство, вместе с приложением. Во-втором (динамическом) случае, можно загрузить функцию из DLL в произвольный момент времени, сыграв аккордом LoadLibrary() , GetProcAddress() и FreeLibrary() .

Скомпоновать библиотеку довольно просто – пишем обычный ЕХЕ, только в шапке указываем директиву "format PE DLL" . В результате, из выхлопной трубы fasm'a получим файл в формате *.dll. Однако при программировании пользовательских библиотек нужно учитывать ряд их особенностей, в частности релокацию образа в памяти.

Чтобы DLL не загрузилась поверх исполняемого приложения (конфликт базовых адресов), её ImageBase обязательно должна быть перемещаемой – достаточно добавить секцию .reloc в коде, об остальном компилятор позаботится сам. В этой секции будут собраны т.н. фиксапы (fixups) – адреса, к которым загрузчик должен будет внести поправки. Фиксапы применяются исключительно к инструкциям, которые обращаются по абсолютным адресам в памяти. Если адрес относительный (в пределах 127 байт), то он не требует модификации:

reloc_1.jpg

Такие отладчики как OllyDbg подчёркивают адреса, которые требуют коррекции после перемещения образа в памяти – на рис.выше их всего 4, и непосредственно опкод инструкции не учитывается (здесь push\call, хотя могут быть и условные\безусловные переходы). Размер самих фиксапов равен 12-бит (выделены красным), а это 2^12=4096 или одна страница виртуальной памяти. Соответственно фиксап не может адресовать блок памяти свыше 4 Кбайт. Другими словами, каждая страница (блок) имеет свой набор фиксов.


Точка входа в DLL-библиотеку

Теперь о насущном..
Подобно исполняемым экзе-приложениям, библиотеки тоже имеют свою точку входа – в доках MSDN эта функция известна как DllEntryPoint() (или DllMain в терминологии си). Здесь и кроется всё самое интересное, чему мы посвятим весь последующий разговор.

Любое обращение EXE-модуля к функциям из DLL происходит через системного посредника LdrLoadDLL() . В системном ансамбле, эта кошерная функция из Ntdll.dll играет огромную роль. Она не только загружает библиотеки в пространство юзера на этапе проецирования образа в память, но и обслуживает функции динамического вызова процедур типа LoadLibrary() , GetModuleHandle() и прочии, от которых мы ожидаем получить дескрипторы модулей. Вот её прототип:

Диалог этого загрузчика с вызываемой библиотекой происходит по схеме "запрос-ответ". Любая библиотека должна иметь упомянутую функцию взаимодействия с загрузчиком DllEntryPoint() , от которой в регистре EAX лоадер ждёт или TRUE (библиотека способна обработать запрос), или FALSE (что-то пошло не так). Не соблюдение этих правил приводит к краху приложения.

LdrLoadDLL() может извещать библиотеку о четырёх событиях, которые происходят во-внешнем (по отношению к библиотеке) мире. Эта информация передаётся точке-входа в DLL в параметре fdwReason . Кроме события, загрузчик сразу передаёт либе её базу в памяти, и способ подключения к исполняемому файлу. Прототип описывается так:

Из всей этой братии, нам интересен лишь аргумент DLL_PROCESS_ATTACH = 1 , благодаря которому статически присобачив библиотеку к нашему процессу, мы можем например, предварительно расшифровать основной код программы, обнаружить отладчик в фоне и т.д. Дело в том, что загрузчик проецирует DLL в пространство процесса задолго до точки-входа в программу, с которой начинают анализ все отладчики, а значит Оля пропустит этот этап между ног. Здесь уместно вспомнить про функции TLS-Callback , ..но поскольку загрузчик парсит импорт из библиотек вторым (а TLS аж десятым), то выигрыш тут на лицо.


DLL – промышленная реализация

dllStack.jpg

Соответственно, мы можем снимать эти аргументы прямо со-стека, и сразу проверять их – код ниже придерживается именно такой политики:

Теперь у нас есть либа, и нужно написать родительское приложение, которое будет статически привязывать к себе эту библиотеку. Во-первых, обратим внимание на имя новоиспечённой DLL – здесь, в секции-экспорта я определил его как "about.dll", это важно! Теперь просто импортируем эту библиотеку по имени, и вызываем из неё функцию примерно так:

dll_example.jpg


Тёмная сторона луны

Пробежавшись по макушкам кода библиотек, посмотрим на них из другой проекции..
Алгоритм работы загрузчика образов LDR плохо освещён в документации и это не удивительно – весь ядерный код мастдая, коммерческая тайна (будь она не ладна). Как это принято у Microsoft, она советует нам ознакомиться с третьей поправкой, восьмого исправления, четвёртой редакции от 32 февраля где сказано, что "..в военное время не только прямой угол может достигть 100 градусов, но и функция инициализации DllEntryPoint() может использоваться не по назначению". Самое главное: кто, где и когда объявляет это положение неизвестно, а значит мы вольны назначать его сами.

Мощь (и беспомощность) точки-входа в библиотеку в том, что некоторая часть театра действий происходит под управлением системных механизмов, отследить которые из прикладного уровня довольно сложно. В документации на РЕ-файл можно найти формат каталога секций "Data-Directories" . В этом дире рассчитавшись на первый-второй выстроены в ряд все секции, которые обходит загрузчик образов LdrLoadDll() при инициализации приложения. Причём последовательность секций строго регламентируется. Вот как выглядит эта структура в представлении редактора PE-Explorer:

dataDir_12.jpg

Таким образом, импорт анализируется загрузчиком на самом начальном этапе, и большинство служебных структур прикладного уровня в этот момент даже не инициализированы ещё до конца – в частности, это относится к структуре PEB , не говоря уже о дочерней к ней структуре ТЕВ. Например, если мы внутри DllEntryPoint() захотим из РЕВ получить флаг-отладки нашего приложения "BeingDebugger" , то потерпим фиаско (проверено на практике). На скамейку запасных сразу отправляется и функция IsDebuggerPresent() , которая читает этот-же флаг из РЕВ. Значит нужно спускаться на уровень ниже, а для защитных механизмов это только гуд.

Если развивать мысль дальше, то наша библиотека не единственная у приложения. Кроме неё, в память каждого процесса система загружает и свои либы Ntdll.dll (собственно в ней и живёт загрузчик LDR), а так-же библиотеку kernel32.dll. С очерёдностью загрузки в память системных библиотек можно ознакомится в отладчике WinDbg, озадачив его командой !peb – поле InMemoryOrderModuleList как-раз отрапортует нам об этом:

pebLdr.jpg

Здесь видно, что первым десантируется в память мой исполняемый файл "DLL_attach.exe", следом за ним системные библиотеки, и только потом моя пользовательская либа "about.dll". Повторюсь, что система выстраивает структуру РЕВ только когда окончательно покончит с окружением процесса, скидывая в неё результаты проделанной работы. А лог на рисунке выше, WinDbg парсит уже из рабочего процесса, поэтому РЕВ как-бы готова к употреблению.


DllEntryPoint() на страже приложения

Теперь будем мыслить так.. Если точка-входа в библиотеку с аргументом DLL_PROCESS_ATTACH отрабатывает на низком уровне, значит на её основе можно соорудить защитный механизм. Система вызывает DllEntryPoint() с аргументом ATTACH сразу после того-как DLL спроецирована на адресное пространство процесса – такая ситуация возможна всего один раз, и на протяжении всего "сеанса" больше не повторяется! В следующий раз, когда тред вызовет LoadLibrary() для уже спроецированной на память DLL, система просто увеличит счётчик обращения к ней и всё.

В предоставленном на суд примере, статически (явно) прилинкованная библиотека внутри DllEntryPoint() будет искать отладчик, и если обнаружит таковой, то вернёт ошибку. Как упоминалось выше, флаги-отладки из структуры РЕВ для этих целей уже не подходят, поэтому придётся искать обходные пути.

Одним из вариантов обнаружения факта отладки является проверка своего статуса в системе. Дело в том, что в дефолте, запущенный на исполнение процесс не имеет привилегии SeDebugPrivilege, зато ею обладает отладчик. Когда он загружает нас в своё тело, то автоматом передаёт и свою привилегию, чекнув которую мы можем определить этот факт. Есть куча способов узнать привилегию своего процесса, и мы воспользуемся самым простым – попытаемся открыть системный процесс csrss.exe.

CSRSS.EXE – это часть пользовательской подсистемы Win32, и при обычных обстоятельствах он не доступен прикладным задачам. Однако привилегия Debug снимает этот запрет, и мы можем открыть его функцией OpenProcess() со-всеми вытекающими последствиями. CSRSS (client\server run-time subsystem) отвечает за консоль, работу с потоками Thread, и за 16-битную среду MS-DOS (на х64 её кастрировали). Это процесс пользовательского режима, который перехватывает обращения к ядру и решает простые вопросы на уровне прикладных задач.

Проблема в том, что функции OpenProcess() требуется идентификатор PID открываемого процесса, т.е. нам нужно будет просканировать всю память и найти нужный процесс по его имени – тривиальная задача по обнаружению отладчика превращается в ад. В сети можно встретить разные варианты перечисления процессов – это CreateToolhelp32Snapshot() , обход в цикле через Process32First\Next() , EnumProcess() и тяжеловес NtQuerySystemInformation() .

Однако получить PID именно процесса CSRSS.EXE можно специально предназначенной для этого функцией из Ntdll.dll под названием CsrGetProcessId() – у неё нет аргументов и в EAX она сразу возвращает столь необходимый нам PID. С использованием этой функции, проверка на отладчик укладывается в пару строк ассемблерного кода. Мы поместим её внутрь DllEntryPoint() и будем проверять запрос на DLL_PROCESS_ATTACH .

В общем случае, программа будет следовать такому алго..
Мы пишем приложение, которое запрашивает пароль. Если юзер введёт валидный пасс, то управление примет зашифрованная функция, которую расшифрует декриптор из внешней библиотеки, с непримечальным именем "about.dll". Алгоритм декриптора – самый примитивный ксор 1-байтныйм ключом, однако тут есть подвох! Пароль на валидность мы вообще не будем проверять, а декриптор сняв с него хэш-сумму сразу расшифрует ей критический блок в основном приложении. Теперь уже взломщик не сможет просто обратить условие проверки, и ему придётся осуществлять только брут, перебором всех возможных ключей.

Если юзер подсунет левый пароль и его хэш не совпадёт с тем, которым мы зашифровали блок, то рано или поздно процессор нарвётся на исключение , поскольку пойдёт пахать зашифрованный код. Чтобы защитить честь его мундира, для таких случаев мы устанавливаем SEH-обработчик, который и будет отлавливать эти исключения. То-есть, если SEH примет управление, значит пасс невалидный и мы подкорректировав значение регистра EIP в контексте, выводим мессагу Wrong и на выход..

hash.jpg

После того-как получим хэш валидного пассворда, можно приступать к шифрованию всего блока этим ключом. Если на запрос юзер введёт валидный пасс, то функция декриптора в библиотеке рассчитает его хэш на автомате, и опять проксорит этим-же клюсом – в результате получим расшифрованный блок, и процессор не споткнётся уже об него. Ниже приведён готовый к употреблению код, который остаётся только скомпилировать, и в основном приложении зашифровать указанный блок:

Чем открыть DLL для редактирования

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

Открываем DLL-файлы для редактирования

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

Способ 1: Resource Hacker

    Скачайте Resource Hacker с официального сайта и произведите простую установку. После этого запустите софт и переходите к открытию файла.

Переход к открытию файла для редактирования в программе Resource Hacker

Выбор файла для открытия в программе Resource Hacker

Иерархия содержимого файла DLL в программе Resource Hacker

Редактирование исходного кода открытого файла в программе Resource Hacker

Переключение в бинарный вид исходного кода в программе Resource Hacker

Сохранение отредактированного файла в доступном формате в программе Resource Hacker

Способ 2: Hex Workshop

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

    После инсталляции запустите Hex Workshop и приступайте к открытию файла.

Переход к открытию файла в программе Hex Workshop

Открытие файла для редактирования в программе Hex Workshop

Просмотр содержимого файла в программе Hex Workshop

Просмотр сведений отдельного блока исходного кода в программе Hex Workshop

Панель инструментов для редактирования файлов в программе Hex Workshop

Способ 3: Доступная среда разработки

Сейчас практически все программисты создают и редактируют код в специальной среде разработки. Ею выступает программное обеспечение, заточенное под выполнение работ с кодом. Обычно там присутствуют вспомогательные инструменты, упрощающие работу с проектами. Некоторые из них справляются с открытием элементов формата DLL и позволяют их редактировать. Сейчас мы хотим взять за пример Embarcadero RAD Studio последней версии.

    Запустите Embarcadero RAD Studio или любую другую подобную среду разработки и переходите к запуску файла.

Переход к открытию файла для редактирования в программе Embarcadero RAD Studio

Выбор файла для редактирования в программе Embarcadero RAD Studio

Изменение сведений о файле и его вида в программе Embarcadero RAD Studio

Отображение файла в бинарном виде в программе Embarcadero RAD Studio

Как можно заметить, подобные редакторы отображают содержимое немного в другом виде, что поможет во время особого редактирования, например, изменения вспомогательных описаний или сохраненного по умолчанию расположения. Если Embarcadero RAD Studio вас не устраивает, рекомендуем ознакомиться с другим подобным софтом в отдельном нашем обзоре от другого автора, перейдя по указанной ниже ссылке.

Способ 4: Sublime Text

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

Открытие файла для редактирования в программе Sublime Text

Просмотр содержимого DLL-файла в программе Sublime Text

Попытка компиляции DLL-файла в программе Sublime Text

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

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

Закрыть

Мы рады, что смогли помочь Вам в решении проблемы.

Отблагодарите автора, поделитесь статьей в социальных сетях.

Закрыть

Опишите, что у вас не получилось. Наши специалисты постараются ответить максимально быстро.

DLL-библиотеки – это одна из разновидностей исполняемого файла, который может многократно использоваться каким-либо приложением или компонентом Windows. Благодаря этому происходит экономия дискового пространства, так как для каждого приложения не нужен отдельный файл с одинаковыми параметрами. Иногда у пользователя может возникнуть необходимость просмотреть содержимое DLL-файла или даже отредактировать его.


Как открыть DLL-файл для редактирования

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

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

Программа 1: Блокнот

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

Инструкция по редактированию DLL-файла с помощью программы Блокнот выглядит следующим образом:

  1. Перейдите в директорию, где находится нужный вам DLL-файл. Кликните по нему правой кнопкой мыши.
  2. Из контекстного меню выберите «Открыть с помощью». По умолчанию операционная система сама предложит вам открыть данный файл с помощью Блокнота. Выберите этот вариант.



После сохранения обязательно проверьте работоспособность файла.

Программа 2: Sublime Text 3

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

Инструкция по открытию и обработке файлов в редакторе Sublime Text 3 выглядит следующим образом:

    Откройте программу. В верхнем меню воспользуйтесь кнопкой «File» и выберите из выпавшего списка вариант «Open File» или просто используйте сочетание клавиш Ctrl+O.



Программа 3: Hex Workshop

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

Инструкция по работе с Hex Workshop выглядит следующим образом:

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


Программа 4: Resource Hacker

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

Инструкция по работе с Resource Hacker для DLL-файлов выглядит следующим образом:

  1. Скачайте и установите программу к себе на компьютер. Запустите ее.
  2. Для открытия файла на компьютере воспользуйтесь иконкой в виде папки с зеленой стрелкой, что расположена в верхнем меню интерфейса программы.


  • Если вам нужно просто сохранить изменения в том же DLL-файле, то воспользуйтесь сочетанием клавиш Ctrl+S или нажмите «File» и далее «Save».
  • Если требуется перевести данный файл в другое расширение или создать просто другой DLL-файл на основе внесенных изменений, то в верхнем меню выберите пункт «Action» и там укажите, в каком виде вам нужно сохранить полученный файл.

Программа 5: Среда разработки Embarcadero RAD Studio

Данный вариант в большей степени следует рассматривать профессиональным программистам, так как Embarcadero RAD Studio это уже профессиональная среда разработки. Помимо встроенного редактора здесь есть множество полезных инструментов, но при этом и сама программа занимает места больше и потребляет ресурсов компьютера больше, чем представленные выше варианты.

Давайте рассмотрим, как работать с файлами DLL с помощью программы Embarcadero RAD Studio:

  1. Выполните запуск среды разработки. В верхнем меню кликните по кнопке «File». Из выпавшего списка выберите вариант «Open». В нашем случае мы открываем именно один файл. Если же у вас есть проект с несколькими файлами и папками, где присутствуют DLL-файлы, то выбирайте вариант «Open Project».
  2. В «Проводнике» Windows укажите файл, который вам нужно открыть. Если вы нажали просто «Open», то выделяйте один DLL-файл, если же открываете проект, то вам требуется выделить папку с проектом. Для подтверждения открытия нажмите кнопку «Открыть».
  3. В рабочей области программы появится иерархия всех составляющих файла. В случае с проектом она будет более обширной и содержать только файлы без иерархии. Справа отобразятся различные атрибуты, например, название элемента, место его хранения, вспомогательное описание и исходный код. Представленные элементы доступны для внесения в них изменений.
  4. Некоторые файлы сразу же открываются программой только в бинарном виде. Это зависит уже от настроек самого файла. При необходимости вы можете переключить вид с обычного кода на бинарный и наоборот.
  5. После внесения изменений не забудьте сохранить файл или проект. Для этого нажмите по кнопке в виде дискеты в верхнем меню или воспользуйтесь сочетанием клавиш Ctrl+S.

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

Библиотека DLL (библиотека динамической компоновки) — это библиотека, содержащая код и данные, которые могут использоваться несколькими приложениями. Visual Studio можно использовать для создания, сборки, настройки и отладки библиотек DLL.

Создание библиотеки DLL

Создавать библиотеки DLL можно с помощью следующих шаблонов проектов Visual Studio.

Дополнительные сведения см. в разделе Методы отладки MFC.

Отладка библиотеки WCF аналогична отладке библиотеки классов. Дополнительные сведения см. в статье Элементы управления Windows Forms.

Обычно библиотека DLL вызывается из другого проекта. При отладке вызывающего проекта в зависимости от конфигурации библиотеки DLL можно выполнить шаг с заходом и отладить код библиотеки DLL.

Конфигурация отладки библиотеки DLL

При создании приложения на основе шаблона проекта Visual Studio Visual Studio автоматически создает требуемые параметры для конфигурации сборки отладки и выпуска. При необходимости эти параметры можно изменить. Дополнительные сведения см. в следующих статьях:

Установка DebuggableAttribute C++

Чтобы отладчик мог присоединиться к библиотеке DLL C++, код C++ должен добавлять DebuggableAttribute .

Установка DebuggableAttribute

В обозревателе решений выберите проект DLL C++ и щелкните значок Свойства либо щелкните проект правой кнопкой мыши и выберите пункт Свойства.

В области Свойства в разделе Компоновщик > Отладка выберите Да (/ASSEMBLYDEBUG) для свойства Отлаживаемая сборка.

Дополнительные сведения см. в статье /ASSEMBLYDEBUG.

Задание расположений файлов DLL C/C++

Для отладки внешней библиотеки DLL вызывающий проект должен находить библиотеку DLL, ее PDB-файл и любые другие файлы, необходимые библиотеке DLL. Вы можете создать пользовательскую задачу сборки, чтобы скопировать эти файлы в выходную папку <project folder>\Debug, или скопировать файлы вручную.

Для проектов C/C++ можно задать расположения файлов заголовков и LIBD-файла на страницах свойств проекта, а не копировать их в выходную папку.

Задание расположений файла заголовка C/C и LIB-файла

В обозревателе решений выберите проект DLL C/C++ и щелкните значок Свойства либо щелкните проект правой кнопкой мыши и выберите пункт Свойства.

В верхней части области Свойства в разделе Конфигурация выберите Все конфигурации.

В разделе C/C++ > Общие > Дополнительные включаемые каталоги укажите папку с файлами заголовков.

В разделе Компоновщик > Общие > Дополнительные каталоги библиотек укажите папку с LIB-файлами.

В разделе Компоновщик > Ввод > Дополнительные зависимости укажите полный путь и имя файла для LIB-файлов.

Дополнительные сведения о параметрах проекта C++ см. в статье Справочник C++ по страницам свойств проекта Windows.

Сборка отладочной версии

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

Вы можете создать пользовательскую задачу сборки, чтобы скопировать эти файлы DLL в выходную папку <calling project folder>\Debug, или скопировать файлы вручную.

Обязательно вызовите библиотеку DLL в правильном расположении. Это может показаться очевидным, но, если вызывающее приложение находит и загружает другую копию библиотеки DLL, отладчик никогда не достигнет заданных точек останова.

Отладка библиотека DLL

Библиотеку DLL нельзя запускать напрямую. Ее должно вызывать приложение, обычно это EXE-файл. Дополнительные сведения см. в статье Проекты Visual Studio — C++.

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

Дополнительные сведения см. в статье Первое знакомство с отладчиком.

Запуск отладки из вызывающего приложения

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

  • Приложение из проекта Visual Studio в том же или другом решении из библиотеки DLL.
  • Существующее приложение, которое уже развернуто и работает на тестовом или рабочем компьютере.
  • Программа расположена в Интернете и доступна по URL–адресу.
  • Веб-приложение с веб-страницей, которая внедряет библиотеку DLL.

Выполнить отладку библиотеки DLL из вызывающего приложения можно следующими способами.

Откройте проект для вызывающего приложения и начните отладку, выбрав Отладка > Начать отладку или нажав клавишу F5.

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

Перед запуском отладки этого вызывающего приложения нужно установить точку останова в DLL. См. статью Использование точек останова. При попадании в точку останова DLL можно пошагово проходить по коду, наблюдая действия в каждой строке. Дополнительные сведения см. в статье Навигация по коду с помощью отладчика.

Во время отладки в окне Модули можно проверить библиотеки DLL и EXE-файлы, загружаемые приложением. Чтобы открыть окно Модули, во время отладки выберите Отладка > Окна > Модули. Дополнительные сведения см. в разделе Практическое руководство. использовать окно модулей.

Использование окна "Интерпретация"

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

Окно Интерпретация можно использовать во время разработки с большинством типов проектов. Оно не поддерживается для SQL, веб-проектов или скриптов.

Например, чтобы протестировать метод с именем Test в классе Class1 , выполните следующие действия.

Откройте проект DLL, откройте окно Интерпретация, последовательно выбрав пункты Отладка > Окна > Интерпретация или нажав сочетание клавиш CTRL+ALT+I.

Предположим, что Test принимает один параметр int , вычислим Test с помощью окна Интерпретация :

Результат будет выведен в окне Интерпретация.

Можно продолжить отладку Test , установив в нем точку останова, а затем снова вычислив эту функцию.

Будет достигнута точка останова и можно будет пошагово пройти Test . После выполнения Test , отладчик вернется в режим разработки.

Отладка в смешанном режиме

Вы можете написать вызывающее приложение для библиотеки DLL в управляемом или машинном коде. Если собственное приложение вызывает управляемую библиотеку DLL и вы хотите выполнить отладку этих двух объектов, можно включить управляемые и машинные отладчики в свойствах проекта. Точный способ выполнения этой операции зависит от того, откуда будет начата отладка: из проекта DLL или из проекта вызывающего приложения. Дополнительные сведения см. в разделе Практическое руководство. Отладка в смешанном режиме.

Можно выполнить отладку собственной библиотеки DLL из управляемого вызывающего проекта. Дополнительные сведения см. в статье об отладке управляемого и машинного кода.

Динамическая библиотека служит базой для создания небольших программ в среде Windows. Это внешние источники данных, которые нужны для полноценной работы ПО. Второй вариант расширения — динамические веб-страницы, которые создаются сервером, при обращении пользователей к ним.

Рисунок 1. Внешний вид ярлыка файлов с расширением .dll

Рассмотрим, как работать с обоими типами в различных ОС.

Чем открыть файл dll для редактирования

Вне зависимости от того, является понятие частью прикладной программы или входит в состав систем МС, распространённый вопрос — чем открыть файл dll для редактирования.

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

Примечание: Поэтому какие-либо изменения в его структуре могут привести к ошибкам операционной системы.

Но, если вы хотите познакомиться с исходным кодом, вам потребуется специальный редактор для системных ресурсов Resource Hacker (ResHacker). Он позволяет извлекать и изменять код на ваше усмотрение (Рисунок 2).

Открываем и редактируем .dll файлы при помощи приложения reshacker

Рисунок 2. Интерфейс приложения Resource Hacker для открытия файлов формата .dll

Пошаговая инструкция

Итак, как открыть dll файл для изменения?

Для чтения в исходном формате выберите в верхней панели File>Open.

Слева будут показаны директивы с содержащимися в них открываемыми объектами.

В центре утилиты содержатся коды, подлежащие изменениям и сохранению.

Для компиляции воспользуйтесь кнопкой Compile Script.

Для сохранения используйте команду File>Save.

Открыть dll файл онлайн

Если вы имеете дело с веб-страницей, то вам понадобится открыть этот dll файл онлайн. Он содержит в себе скрипты сервера, отвечающие за генерирование HTML. К примеру, VB или Perl.

Как открыть dll файл windows 10

Если это элементы библиотеки, которые расположены в системной папке, то они предназначены для запуска приложений, созданных при помощи Visual C++.

Поэтому, чтобы их открыть на том же windows10 понадобится соответствующее ПО от МС — Visual Studio или VisualFoxPro (Рисунок 3).

Открываем .dll файлы при помощи visual studio для windows 10

Рисунок 3. Визуальный пример открытого файла формата .dll в приложении Visual Studio на Windows 10

Также «длл» должен открываться программой, использующей его библиотеку.

Как открыть файл dll на windows 8

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

Microsoft Windows 8;

Microsoft Windows NT 4.0;

Как открыть файл dll в windows 7

Вы можете встретить распространённый тип документа mfc42u.dll, который относится к Microsoft Foundation Class (MFC).

Примечание: Он отвечает за запуск рабочих дополнений на вашем ПК.

Открыть этот файл dll и подобные ему в windows 7 можно теми же утилитами, что используются для 8 версии, или воспользоваться небольшим редактором исполняемых элементов — Resource Tuner (Рисунок 4).

Открываем .dll файлы на windows 7 при помощи resource tuner

Рисунок 4. Интерфейс приложения Resource Tuner с открытым файлом формата .dll

Он позволяет изменять различные детали пользовательского интерфейса — строки меню и диалоговых окон, внешний вид курсора, иконок и так далее. В нём ресурсы библиотеки отделены от кода, который остаётся неизменным. Для его редактирования есть используемые в программировании профессиональные редакторы PE Explorer и FlexHex, (в зависимости от вносимых правок).

Resource Tuner предусматривает несколько способов открытия объекта.

Для просмотра и изменения кликните Open File на панели инструментов.

Для выполнения действия в меню — введите команду File>Open.

Или используйте комбинацию клавиш CTRL+O.

Всплывающее окно возле кнопки тулбара предоставит вам список последних открывавшихся элементов. Его можно получить командой File>Recent Files из меню программы, которая пользуется динамически подключаемой библиотекой. Настройка количества данных в списке осуществляется в окне диалога Customize.

Открыть dll файл на MacOS

На MacOs тоже встречаются данные этого формата. Их можно просмотреть в окне любого веб-браузера, если они представлены в виде интернет страницы.

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

Открытие dll файл на linux

Чтобы получить доступ к ним на Linux, понадобится эмулятор Windows – Wine. Он подражает поведению различных версий этой операционной системы.

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

Настроить работу Wine можно при помощи вкладки Default Settings — установок по умолчанию. Так он будет автоматически запускать приложения в выбранной вами ОС.

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

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

Найдите нужный элемент для декомпиляции.

Вы можете его просто просмотреть, не нарушая целостности системы.

Для профессионального применения есть отдельное ПО. Самый известный его вариант — Resource Hacker, описание которого было приведено выше.

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

Читайте также: