Dependency walker как пользоваться
Перейти к содержимому

Dependency walker как пользоваться

Dependency walker как пользоваться

На этом шаге мы рассмотрим способы получения информации о связях .

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

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

Рис.1. Утилита Dependency Walker

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

  • Запуск Dependency Walker .
    1. В меню Пуск выберите пункт Программы .
    2. Щелкните пункт Microsoft Visual Studio 6.0 , затем — Microsoft Visual Studio 6.0 Tools и, наконец, — Depends . Кроме того, можно добавить команду для вызова утилиты Dependency Walker в меню Tools Visual C++ .
    3. Когда появится окно программы Dependency Walker , выберите в его меню File пункт Open и откройте приложение или DLL , которые Вы хотите исследовать.

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

Dependency walker как пользоваться

Dependency Walker – представляет собой инструмент, который позволяет определить те DLL-библиотеки, которые по каким-то причинам не могут быть подключены и работать с проектом.

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

Для того чтобы посмотреть какие библиотеки не работают делайте следующее:

1. Скачайте и распакуйте архив с программой.

2. Откройте программой exe-файл программы или игры, которую вы хотите протестировать.

3. После анализа результаты работы Dependency Walker будут в окне. В левой верхней форме программа пометит красным DLL с которыми произошла ошибка при загрузке. Такие DLL лучше заменять.

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

Иногда обычные шаги по устранению неполадок просто не сократят его. Возможно, нам придется идти дальше и дальше – больше похоже на судебное устранение неполадок. Сегодня я напишу об инструменте, который поможет нам в этом. Dependency Walker – это инструмент для анализа зависимостей приложений Windows, таких как функции, модули и т. Д. Он строит иерархическое дерево всех зависимых модулей exe, dll, sys и т. Д.

Dependency Walker

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

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

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

  • Обнаружение отсутствующих файлов. Это файлы, которые необходимы в качестве зависимости от другого модуля. Симптомом этой проблемы является «Ошибка динамической библиотеки ссылок BAR.DLL не найдена в указанном пути …».
  • Обнаружение недействительных файлов. Сюда входят файлы, не совместимые с Win32 или Win64, и файлы, которые повреждены. Симптомом этой проблемы является ошибка «Ошибка приложения или DLL BAR.EXE не является допустимым Windows».
  • Обнаруживает несоответствия импорта / экспорта. Проверяет, что все функции, импортированные модулем, фактически экспортируются из зависимых модулей. Все нерешенные функции импорта помечены с ошибкой. Симптомом этой проблемы является «Ошибка точки входа FOO не может быть обнаружена в ошибке динамической библиотеки BAR.DLL».
  • Обнаруживает ошибки циклической зависимости. Это очень редкая ошибка, но может произойти с перенаправленными функциями.
  • Обнаруживает несогласованные типы процессоров. Это происходит, если модуль, построенный для одного процессора, пытается загрузить модуль, построенный для другого процессора.
  • Определяет несоответствия контрольной суммы, проверяя контрольные суммы модулей, чтобы проверить, были ли изменены какие-либо модули после их создания.
  • Обнаружение коллизий модулей на выделяя любые модули, которые не загружаются по их предпочитаемому базовому адресу.
  • Обнаруживает сбои инициализации модуля, отслеживая вызовы на точки входа модуля и ищет ошибки.
  • Dependency Walker также может выполнять профиль времени выполнения вашего приложения для обнаружения динамически загружаемых модулей и сбоев инициализации модуля. Такая же проверка ошибок сверху применяется к динамически загружаемым модулям.

Например, я помогал клиенту на днях – она ​​загружала Internet Explorer, но IE продолжал сбой, без каких-либо конкретных ошибок. Мы выполнили большинство основных проблем, таких как отключение надстроек и панелей инструментов, сброс настроек IE по умолчанию и т. Д. Но все равно он продолжал сбой. Это означало, что один или несколько файлов, необходимых для нормальной работы Internet Explorer, создавали проблему. Всегда сложно устранить такие случаи, но с помощью Dependency Walker мы можем увидеть, что-то не так с одним из зависимых файлов.

Поэтому я загрузил Internet Explorer в Dependency Walker.

Затем я расширил список один за другим

Затем я прошел через каждый из модулей, чтобы увидеть, могу ли я найти там что-то подозрительное. Я прокрутил модуль и был достаточно удачлив, чтобы найти проблему.

Я обнаружил, что файл IEFRAME.dll отсутствует. Поэтому я пошел и заменил файл с установочного DVD-диска. Это решило проблему. Теперь Internet Explorer больше не разбился.

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

Как использовать Dependency Walker

Чтобы использовать Dependency Walker для исследования ошибок, вы можете выполнить следующие действия:

  1. Walk Dependency Walker
  2. Нажмите «Открыть» в меню «Файл», чтобы загрузить файл проблемы
  3. В меню «Вид», нажмите «Начать профилирование». Появится диалоговое окно «Модуль профиля»
  4. Введите любые переключатели, параметры программы и другие параметры, которые вы хотите, и нажмите «ОК».

Уязвимость зависания будет вводить dwinject.dll до возникновения ошибки и будет регистрировать события, происходящие во время ошибка.

Dependency Walker download

Вы можете скачать Dependency Walker от здесь.

На этом шаге мы рассмотрим способы получения информации о связях .

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

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

Рис.1. Утилита Dependency Walker

При помощи утилиты Dependency Walker можно получить следующую информацию:

  • название и местоположение файлов, необходимых для запуска программы или DLL ;
  • базовый адрес каждого зависимого модуля;
  • версию каждого модуля;
  • содержит ли модуль отладочную информацию.
  • Запуск Dependency Walker .
  • В меню Пуск выберите пункт Программы .
  • Щелкните пункт Microsoft Visual Studio 6.0 , затем – Microsoft Visual Studio 6.0 Tools и, наконец, – Depends . Кроме того, можно добавить команду для вызова утилиты Dependency Walker в меню Tools Visual C++ .
  • Когда появится окно программы Dependency Walker , выберите в его меню File пункт Open и откройте приложение или DLL , которые Вы хотите исследовать.

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

Dependency walker как пользоваться

The best way to debug a module that fails to register is by opening REGSVR32.EXE in Dependency Walker rather than your DLL. Then choose to start profiling (F7). In the profiling dialog, enter the full path to your DLL in the "Program arguments" field. For "Starting directory", you may wish to enter the directory that the DLL resides in. Check the options you wish to use and press Ok. This will run REGSVR32.EXE and attempt to register your DLL. By actually running REGSVR32.EXE, you can see more types of runtime errors.

First, there is the overhead of Dependency Walker that slows the execution of your application down. If your application is crashing due to some race condition, this slow down alone might be enough to avoid the race condition. If this is the case, it is a design issue of the application and you are just getting lucky when it doesn't crash.

Second, normally when threads block on critical sections, events, semaphores, mutexes, etc., they unblock on a first-in-first-out (FIFO) basis. This is not guaranteed by the OS, but is usually the case. When being run under a debugger, FIFO queues are sometimes randomized, so threads may block and resume in a different order than they would when not running under a debugger. This might be relieving a race condition or altering the execution enough to make things work. Again, the application is just getting lucky when it doesn't crash.

Finally, applications running under the debugger automatically get a system debug heap. All memory functions are handled slightly different. Allocations are padded with guard bytes to check to see if you are writing outside of a region you have allocated (buffer overrun/underrun). Allocations might also be laid out differently in memory then when not under the debugger. So, if you are writing past the end of a buffer under the debugger, you might be trashing guard bytes, freed memory, or just something not very critical. However, when not running under the debugger, you might be trashing something critical (like a pointer), and your app crashes.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *