2010-10-18 5 views
1

Я пытаюсь добавить ASLR в проект, используя файл vsprops. Я подтвердил, что файл используется проектом, так как в применяемом файле есть другие настройки, и умышленное искажение файла приводит к ошибке при открытии проекта под MSVC. Когда я установил ASLR в yes, я могу видеть RandomizedBaseAddress="2" под номером <Tool Name=VCLinkerTool.MSVC linker не будет применять RandomizedBaseAddress через файл vsprops

но ... Это не имеет никакого эффекта. Я также могу поставить RandomizedBaseAddress="xxxxx", и это все равно. Это похоже на то, что настройки для компоновщика не собираются. Я также попробовал GenerateDebugInformation="True", который является другим параметром, который я видел в других файлах vsprops, и это тоже игнорируется. Это как если бы линкер игнорировал файл vsprops или эти настройки в нем.

Что дает? Кто-нибудь видел это раньше?

ответ

1

Файл проекта явно задает «по умолчанию» для этих параметров, тем самым переопределяя файл vsprops. Явная установка этих элементов на «наследование от родительских или по умолчанию по умолчанию» устранила проблему. Спасибо за все ответы.

0

Что заставляет вас думать, что он не работает? Изображение может загружаться по тому же адресу только потому, что системы решают загрузить его там, а не потому, что его запрашивают, чтобы его туда поместили, второй груз должен, однако, находиться на другом адресе, пока второй груз не будет выполнен после перезагружать. Кроме того, ASLR предназначен только для Vista и выше, Windows XP не будет пытаться рандомизировать его вообще, он просто загрузит его в первый доступный слот

+0

Одним из намеков был факт, что я мог указать «RandomizedBaseAddress =« xxxxx »в файле vsprops и не дал мне никакой ошибки. – fbrereto

+0

Простейший способ проверки - запустить dumpbin/headers и посмотреть, содержат ли заголовки DLL-характеристики Dynamic Base. – EricLaw

+0

@fbrereto: это вообще не доказательство, оно может относиться ко всем ненулевым значениям как истинным, так как это единственные параметры, которые я вижу в MSVC, - это отметить, что изображение несовместимо с ASLR. Единственные хорошие способы тестирования - проверить заголовки или лучше, используя отладчик/GetModuleHandle, чтобы проверить фактические адреса загрузки (ASLR может на самом деле по-прежнему играть, если изображение имеет фиксированную базу и не помечено как несовместимое) – Necrolis