Ключ заключается в том, что каждый модуль Windows (как исполняемые файлы, так и библиотеки) содержит таблицу импорта , в которой перечислены все другие модули, от которых он зависит. Эта таблица создается компоновщиком и используется операционной системой для определения зависимостей модуля и загрузки соответствующих библиотек.
Таким образом, все, что нужно сделать Dependency Walker, - это пройти через все эти модули (образно, «проходя» через них), составив список модулей, указанных в соответствующих таблицах импорта.
Он не отображает все зависимости времени выполнения (например, загруженные с помощью функции GetProcAddress
), так как они не перечислены в таблице импорта. Он показывает только зависимости времени загрузки (или статические).
Вы можете найти больше информации о том, как работает Dependency Walker здесь и здесь .