- Исполняемый файл загружается и запускается в WinDbg
- Он загружает необходимые ему модули по определенным адресам
- Установка / отслеживание точек останова, полученных в этом сеансе, зависит от этих адресов
- Когда другой сеанс запускается для того же исполняемого файла (либо в зависимости от того, как путь выполнения кода изменяет порядок зависимости dll, либо от некоторого неопределенного поведения загрузчика?), Модули теперь загружаются по разным адресам.
Было бы полезно, если бы был способ проинструктировать windbg / loader загружать еще не загруженные модули по заданным адресам.Это сделало бы некоторые сценарии / сравнения текста намного проще.
Да, я понимаю, что, например, установка точек останова относительно имен символов должна быть предпочтительнее, чем использование фиксированных адресов, но возможность "воспроизводить"Среда отладки ссылок определенно имеет определенные преимущества.
Предполагая, что мы имеем дело с сторонними DLL-библиотеками (которые я не могу перекомпилировать с предопределенными адресами загрузки), есть ли способ сделать это?
Я былтак рад видеть, что .reload
команда имеет параметр адреса, который выглядел так, как будто бы он делал именно то, что я спрашиваю.Тем не менее, даже если эта команда загрузит модули, когда программа будет продолжена (и требуется фактическая загрузка DLL), она продолжит работу и все еще загрузит другую копию (?) Для того же модуля и выдаст предупреждение типа:
WARNING: moduleX_1be0000 overlaps moduleX
Так что на самом деле это не сработало, как я ожидал, поэтому этот вопрос!