Фиксированный базовый адрес в MSVC2015

Я пытаюсь отладить утечку памяти в моем приложении. Утекший объект несколько трудно идентифицировать (до уничтожения кучи), и существует много подобных объектов. Если бы у каждого сеанса был один и тот же адрес, это значительно облегчило бы его. Поэтому я пытаюсь отключить ASLR, используя /FIXED а также /DYNAMICBASE:NO в свойствах компоновщика моего исполняемого файла.

Тем не менее, кажется, что это не приводит к желаемому результату, адрес по-прежнему каждый раз отличается. Кроме того, даже адреса для argv в main разные сессии Есть ли какие-то дополнительные параметры, которые мне нужно установить, или я почему-то неправильно понимаю назначение этих флагов?

3

Решение

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

Вы можете переопределить operator new контролировать распределение памяти и использовать VirtualAlloc с определенным базовым адресом, чтобы сделать распределение более детерминированным (хотя все еще могут иметься многопоточные условия гонки). В качестве альтернативы используйте средства отладки кучи MSVC по умолчанию, чтобы идентифицировать блок по его порядковому номеру, а не по адресу.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]