Куча рандомизации в винде - PullRequest
0 голосов
/ 05 августа 2009

Windows 7 имеет рандомизацию кучи и рандомизацию стека . Как я мог справиться с этим? Как они влияют на производительность моего приложения? Где я мог найти больше информации о том, как это работает?

Я использую Visual Studio 2008 для разработки программ на C ++. Я не могу найти параметры компилятора для этих функций.

Ответы [ 2 ]

2 голосов
/ 28 августа 2009

Хорошо, рандомизация кучи и рандомизация стека являются функциями Windows, но должны быть явно включены для каждого процесса во время соединения. Марк Руссинович описал, как это работает, в своей 5-й Windows Internals книга.

Рандомизация стека состоит в том, чтобы сначала выбрать одно из 32 возможных местоположений стека, разделенных либо 64 КБ, либо 256 КБ. Этот базовый адрес выбирается путем нахождения первой подходящей свободной области памяти и затем выбора x -ой доступной области, где x снова генерируется на основе TSC текущего процессора, смещенного и замаскированного в 5-битное значение. <...>

Наконец, ASLR рандомизирует расположение начальной кучи процесса (и последующих кучи) при создании в пользовательском режиме. Функция RtlCreateHeap использует другое псевдослучайное значение, полученное из TSC, для определения базового адреса кучи. Это значение, на этот раз 5 битов, умножается на 64 КБ для генерации конечного базового адреса, начиная с 0, давая возможный диапазон от 0x00000000 до 0x001F0000 для начальной кучи. Кроме того, диапазон перед базовым адресом кучи освобождается вручную в попытке форсировать нарушение доступа, если атака выполняет перебор всего возможного диапазона адресов кучи.

0 голосов
/ 05 августа 2009

Конечно, это просто функция ОС? Это не должно вас беспокоить. ОС будет перемещать ваше приложение, и если вы не предполагаете, что ваше приложение загружено по определенному адресу памяти (который вы никогда не должны предполагать), у вас не возникнет никаких проблем.

...