2010-10-18 68 views
1

我想將ASLR添加到使用vsprops文件的項目。我已驗證該文件正在被項目使用,因爲文件中正在應用其他設置,並且在MSVC下打開項目時故意損壞文件會產生錯誤。當我將ASLR設置爲yes時,我可以在<Tool Name=VCLinkerTool下看到RandomizedBaseAddress="2"MSVC鏈接器不會通過vsprops文件應用RandomizedBaseAddress

但是...它沒有效果。我也可以把RandomizedBaseAddress="xxxxx"它不在乎。就好像鏈接器的設置沒有被拾取。我也試過GenerateDebugInformation="True"這是我見過其他vsprops文件使用的另一種設置,這也被忽略了。就好像鏈接器忽略了vsprops文件或其中的這些設置。

什麼給?有沒有人見過這個?

回答

1

項目文件爲這些參數顯式指定了「default」,因此覆蓋vsprops文件。明確地將這些項目設置爲「從父項目或項目默認值繼承」修復了這個問題。感謝所有的答覆。

0

是什麼讓你覺得它不起作用?圖像可能會加載在相同的地址,純粹是因爲系統決定在那裏加載它,而不是因爲請求放在那裏,所以第二個加載應該在不同的地址,只要第二個加載不是在重啓。 ASLR僅適用於vista及以上版本,windows xp根本不會嘗試隨機化,它只會在第一個可用插槽中加載它

+0

一個提示是我可以在vsprops文件中指定'RandomizedBaseAddress =「xxxxx」'這個事實,它沒有給我任何錯誤。 – fbrereto 2010-10-18 18:28:41

+0

最簡單的檢查方法是運行dumpbin/headers並查看頭文件是否包含「Dynamic Base」DLL特徵。 – EricLaw 2010-10-18 18:28:45

+0

@fbrereto:那根本沒有證據,它可以將所有非零值視爲true,因爲它是我在MSVC中看到的唯一選項,它將圖像標記爲與ASLR不兼容。唯一不錯的測試方法是使用調試器/ GetModuleHandle檢查頭文件或更好地檢查實際的加載地址(如果圖像具有固定的基礎,並且未標記爲不兼容,則ASLR實際上仍然會啓動) – Necrolis 2010-10-18 18:34:54