Экспорт функций DLL. Динамическая компоновка во время загрузки

Dependency Walker Dependency Walker

Dependency Walker (англ. Dependency Walker - обходчик зависимостей) или depends.exe - бесплатная программа для Microsoft Windows , используемая для получения списка импортируемых и экспортируемых функций PE-файла . Она также строит в виде диаграммы иерархическое дерево всех файлов, необходимых PE-файлу для выполнения (зависимостей).

Основные возможности

  • Запускается в Windows 95, 98, Me, NT, 2000, XP, 2003, Vista, 7, 8 и 10
  • Отображает список всех зависимых модулей (PE-файлов)
  • Поддерживает 64-битные исполняемые файлы и исполняемые файлы Windows CE
  • Определяет, написан ли модуль на или C++
  • Определяет модули, не включенные в таблицу импорта
  • Цветовое кодирование списка для более легкого выявления проблем (разорванные зависимости обозначаются красным)
  • Отображение зависимостей всех модулей в виде диаграммы с иерархическим деревом

Напишите отзыв о статье "Dependency Walker"

Ссылки

  • Christophe Nasarre // Windows XP

Отрывок, характеризующий Dependency Walker

На другой день, рано утром, дряхлый Кутузов встал, помолился богу, оделся и с неприятным сознанием того, что он должен руководить сражением, которого он не одобрял, сел в коляску и выехал из Леташевки, в пяти верстах позади Тарутина, к тому месту, где должны были быть собраны наступающие колонны. Кутузов ехал, засыпая и просыпаясь и прислушиваясь, нет ли справа выстрелов, не начиналось ли дело? Но все еще было тихо. Только начинался рассвет сырого и пасмурного осеннего дня. Подъезжая к Тарутину, Кутузов заметил кавалеристов, ведших на водопой лошадей через дорогу, по которой ехала коляска. Кутузов присмотрелся к ним, остановил коляску и спросил, какого полка? Кавалеристы были из той колонны, которая должна была быть уже далеко впереди в засаде. «Ошибка, может быть», – подумал старый главнокомандующий. Но, проехав еще дальше, Кутузов увидал пехотные полки, ружья в козлах, солдат за кашей и с дровами, в подштанниках. Позвали офицера. Офицер доложил, что никакого приказания о выступлении не было.
– Как не бы… – начал Кутузов, но тотчас же замолчал и приказал позвать к себе старшего офицера. Вылезши из коляски, опустив голову и тяжело дыша, молча ожидая, ходил он взад и вперед. Когда явился потребованный офицер генерального штаба Эйхен, Кутузов побагровел не оттого, что этот офицер был виною ошибки, но оттого, что он был достойный предмет для выражения гнева. И, трясясь, задыхаясь, старый человек, придя в то состояние бешенства, в которое он в состоянии был приходить, когда валялся по земле от гнева, он напустился на Эйхена, угрожая руками, крича и ругаясь площадными словами. Другой подвернувшийся, капитан Брозин, ни в чем не виноватый, потерпел ту же участь.

Depends - бесплатная программа, также известная как Dependency Walker. Представляет собой инструмент, служащий анализа структуры, также для поиска зависимостей (явных и неявных) между модулями в исполняемых файлах и библиотеках. Программа работает с файлами форматов EXE, SYS, DLL и OCX. Она поддерживает как 32-битые, так и 64-битные системы Windows.

Работа с программой

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

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

Интерфейс

Как мы уже говорили ранее, графическая оболочка программы состоит из нескольких независимых панелей. Помимо списка и окна с общей информации, рабочая область также включает в себя окно лога. При необходимости размер любой из этих панелей можно изменить, "потянув" за нужную рамку. Наиболее продвинутые пользователи, не привыкшие работать с GUI, могут переключиться в режим командной строки. В целом, работать с Depends довольно удобно. Да и даже если вам так не кажется, то придется смириться. Никаких достойных альтернатив данной программе, к сожалению, не существует.

Ключевые особенности

  • определение явных и неявных зависимостей;
  • работа с файлами EXE, DLL, OCX и SYS;
  • довольно удобный, масштабируемые интерфейс;
  • предоставление Debug-данных;
  • возможность переключения в режим командной строки;
  • поиск ошибок экспорта и импорта.

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

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

Скачать бесплатно полную русскую версию Dependency Walker с официального сайта без регистрации и смс.

Системные требования

  • Поддерживаемые ОС: Windows 7, 8.1, XP, 10, 8, Vista
  • Разрядность: 32 bit, x86, 64 bit

Назначение Dependency Walker

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

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

Скачать бесплатно Dependency Walker всегда можно с сайта www.dependencywalker.com.

Как модули зависят друг от друга?

Модули зависят друг от друга так:

  • Неявная зависимость (Implicit Dependancy). Её еще называют зависимостью времени загрузки. Пусть модуль А неявно связывается с модулем Б во время компиляции, и модуль А фактически вызывает функции из модуля Б. Значит модуль Б есть неявная зависимость модуля А, модуль Б будет загружен в память независимо от того, будут ли функции модуля Б фактически вызваны при работе приложения. Модуль Б будет указан в таблице импорта модуля А.
  • Зависимость с задержкой загрузки (отсроченная) (Delay-load Dependancy). Пусть модуль А связывается с задержкой с модулем Б во время компиляции, и модуль А фактически вызывает функции из модуля Б. Модуль Б будет загружет только при явном вызове его методов из модуля А при работе приложения. Модуль Б будет указан в таблице импорта с задержкой загрузки модуля А.
  • Опережающая зависиЗависимость с задержкой загрузки (отсроченная) (Delay-load Dependancy). Пусть модуль А связывается с задержкой с модулем Б во время компиляции, и модуль А фактически вызывает функции из модуля Б. Модуль Б будет загружет только при явном вызове его методов из модуля А при работе приложения. Модуль Б будет указан в таблице импорта с задержкой загрузки модуля А.
  • Явная зависимость (Explicit Dependancy). Её еще называют зависимостью времени исполнения или динамической зависимостью. Здесь модуль А не линкуется с модулем Б. Во время исполнения модуль А явно загружает модуль Б посредством LoadLibrary. Модуль Б не будет указан в таблицах импорта модуля А.
  • Системная зависимость (System Hook Dependancy). Пример: если кликнуть мышкой во время работы приложения, то операционная система создаст модуль и введёт его в процесс приложения для обработки события.

Динамические зависимости

Для определения какие модули загружаются при работе приложения используют Application Profiling, т.е. просмотр параметров приложения при его работе. Слово «profile» имеет ряд переводов и, в том числе, «совокупность параметров». Профиль приложения - это совокупность параметров приложения. Application Profiling показывает профиль приложения, например: какие модули динамически загружаются, какие не прошли инициализацию и т.п.

Профилированию подвергаются выполнимые файлы, обычно «.exe». Динамическую загрузку модулей можно наблюдать только в процессе работы приложения, а неявную, с здержкой, опережающую зависимости можно видеть сразу после того, как приложение будет открыто в Dependency Walker.

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

Как оценивать выявленные ошибки и предупреждения?

Ошибка загрузки означает, что операционная система не может загрузить все требуемые модули или не найдены требуемые функции. Ошибки загрузки возникают и при попытке загрузить поврежденный файл, не Windows модуль, модуль для иного типа процессора, 16-битный модуль в 32-битное приложение. Ошибки загрузки часто сразу вывляются Dependency Walker-ом при открытии файла.

Ошибки времени исполнения могут возникать при загрузке новых модулей уже после запуска приложения. Приложение может обращаться к методам в этих модулях и если возникнут проблемы, Dependency Walker заметит их. Но, если приложение имеет обработчик таких ошибок, Dependency Walker может пропустить их.

Есть ещё один тип предупреждений, на которые укажет Dependency Walker. Их зовут первым и вторым исключениями. При возникновении исключительной ситуации приложение получает возможность обработать его. Это называют исключением первого шанса. Если исключение будет обработано приложением, то Dependency Walker может проигнорировать его. Но если не обработает, то исключение первого шанса становится исключением второго шанса, которое приводит к аварийной остановке приложения. Dependency Walker регистрируе исключение второго шанса, хотя есть возможность для него указать и на первое.

Главное окно программы Dependency Walker

Главное окно программы Dependency Walker разбито на пять частей:

  • дерево объектов;
  • список уникальных модулей;
  • импортируемые функции;
  • экспортируемые функции;
  • журнал.

Все они имеют контекстные меню (клик правой кнопкой). Если установить курсор на объект и нажать F1, то получим справку по данному объекту.

Дерево объектов

Дерево объектов:

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

Если модуль представлен в дереве объетов более одного раза, то он отмечается значком с жирной черной стрелкой. Разворачивается такой модуль в дереве только один раз, и чтоб увидеть эту развертку вибираем в контестном меню «Highlight Original Instance Command». Модули с опережающая зависимость (Forwarded Dependency) отмечаются тонкой изогнутой стрелкой.

Модули с задержкой загрузки (отсроченная) (Delay-load Dependancy) отмечаются картинкой с песочными часами.

Динамические модули, а это явная зависимость (Explicit Dependancy), отмечают картинкой с солнцем.

Розовый фон пиктограмм - это предупреждение.

Если модуль не найден, то увидим знак вопроса на желтом фоне.

Красная пиктограмма указывает на ошибку.

Если в контекстном меню снять флаг «Auto Expand», то буде показан корневой элемент, его непосредственные зависимости и возможные ошибки.

Список уникальных модулей

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

Отличие этого окна от дерева объектов в том, что здесь представлены только уникальные модули, а в дереве объектов модули могут встречаться многократно. Значки в певом столбце аналогичны значкам в дереве объектов.

Импортируемые функции

Импортируемые модулем функции представлены в окне

Красные значки укажут на ошибки.

Экспортируемые функции

Все экспортируемые модулем функции

Синеватый фон указывает на функции, которые фактически вызываются в этой сессии.

Журнал

Журнал показывает сообщения о предупреждениях, ошибках и др.

Как работать с Dependency Walker?

Открываем файл, который собираемся проверять: File - > Open. Далее, выбираем пункт меню Profile - > Start Profiling. Для завершения работы: Profile - > Stop Profiling.

Dependency Walker

Ошибка создания миниатюры: Файл не найден


Скриншот программы
Тип
Автор

Ошибка Lua в Модуль:Wikidata на строке 170: attempt to index field "wikibase" (a nil value).

Разработчик
Разработчики

Ошибка Lua в Модуль:Wikidata на строке 170: attempt to index field "wikibase" (a nil value).

Написана на

Ошибка Lua в Модуль:Wikidata на строке 170: attempt to index field "wikibase" (a nil value).

Интерфейс

Ошибка Lua в Модуль:Wikidata на строке 170: attempt to index field "wikibase" (a nil value).

Операционная система
Языки интерфейса

Ошибка Lua в Модуль:Wikidata на строке 170: attempt to index field "wikibase" (a nil value).

Первый выпуск

Ошибка Lua в Модуль:Wikidata на строке 170: attempt to index field "wikibase" (a nil value).

Аппаратная платформа

Ошибка Lua в Модуль:Wikidata на строке 170: attempt to index field "wikibase" (a nil value).

Последняя версия
Кандидат в релизы

Ошибка Lua в Модуль:Wikidata на строке 170: attempt to index field "wikibase" (a nil value).

Бета-версия

Ошибка Lua в Модуль:Wikidata на строке 170: attempt to index field "wikibase" (a nil value).

Альфа-версия

Ошибка Lua в Модуль:Wikidata на строке 170: attempt to index field "wikibase" (a nil value).

Тестовая версия

Ошибка Lua в Модуль:Wikidata на строке 170: attempt to index field "wikibase" (a nil value).

Читаемые форматы файлов

Ошибка Lua в Модуль:Wikidata на строке 170: attempt to index field "wikibase" (a nil value).

Создаваемые форматы файлов

Ошибка Lua в Модуль:Wikidata на строке 170: attempt to index field "wikibase" (a nil value).

Состояние

Ошибка Lua в Модуль:Wikidata на строке 170: attempt to index field "wikibase" (a nil value).

Лицензия
Сайт
Ошибка Lua в Модуль:Wikidata на строке 170: attempt to index field "wikibase" (a nil value).

Dependency Walker (англ. Dependency Walker - обходчик зависимостей) или depends.exe - бесплатная программа для Microsoft Windows , используемая для получения списка импортируемых и экспортируемых функций PE-файла . Она также строит в виде диаграммы иерархическое дерево всех файлов, необходимых PE-файлу для выполнения (зависимостей).

Основные возможности

  • Запускается в Windows 95, 98, Me, NT, 2000, XP, 2003, Vista, 7, 8 и 10
  • Отображает список всех зависимых модулей (PE-файлов)
  • Поддерживает 64-битные исполняемые файлы и исполняемые файлы Windows CE
  • Определяет, написан ли модуль на или C++
  • Определяет модули, не включенные в таблицу импорта
  • Цветовое кодирование списка для более легкого выявления проблем (разорванные зависимости обозначаются красным)
  • Отображение зависимостей всех модулей в виде диаграммы с иерархическим деревом

Напишите отзыв о статье "Dependency Walker"

Ссылки

  • Christophe Nasarre // Windows XP

Отрывок, характеризующий Dependency Walker

– Расскажи мне ещё, Север! Расскажи мне, пожалуйста, про Катар… Сколько прожили они без своей Путеводной Звезды, без Магдалины?
Но Север вдруг почему-то заволновался и напряжённо ответил:
– Прости меня, Изидора, но, думаю, я расскажу тебе всё это позже… Я не могу здесь оставаться более. Прошу тебя, держись мой друг. Что бы ни случилось – постарайся быть сильной…
И, мягко растаяв, ушёл «дуновением»...
А на пороге уже снова стоял Караффа.
– Ну что ж, Изидора, надумали ли что-то порассудительнее? – не поздоровавшись, начал Караффа. – Я очень надеюсь, что эта неделя образумит Вас и мне не придётся прибегать к самым крайним мерам. Я ведь говорил Вам совершенно искренне – мне не хочется причинять вред Вашей прекрасной дочери, скорее наоборот. Я был бы рад, если бы Анна и дальше училась и познавала новое. Она пока ещё слишком вспыльчива в своих поступках и категорична в своих суждениях, но в ней живёт огромный потенциал. Можно только представить, на что она была бы способна, если позволить ему правильно раскрыться!.. Как Вы на это смотрите, Изидора? Ведь для этого мне нужно всего лишь Ваше согласие. И тогда снова у Вас будет всё хорошо.
– Не считая смерти моего мужа и отца, не так ли, Ваше святейшество? – горько спросила я.
– Ну, это было непредвиденным осложнением (!..). И ведь у Вас ещё остаётся Анна, не забывайте этого!