MSVC链接器不会通过vsprops文件应用RandomizedBaseAddress

问题描述:

我想将ASLR添加到使用vsprops文件的项目。我已验证该文件正在被项目使用,因为文件中正在应用其他设置,并且在MSVC下打开项目时故意损坏文件会产生错误。当我将ASLR设置为yes时,我可以在<Tool Name=VCLinkerTool下看到RandomizedBaseAddress="2"MSVC链接器不会通过vsprops文件应用RandomizedBaseAddress

但是...它没有效果。我也可以把RandomizedBaseAddress="xxxxx"它不在乎。就好像链接器的设置没有被拾取。我也试过GenerateDebugInformation="True"这是我见过其他vsprops文件使用的另一种设置,这也被忽略了。就好像链接器忽略了vsprops文件或其中的这些设置。

什么给?有没有人见过这个?

项目文件为这些参数显式指定了“default”,因此覆盖vsprops文件。明确地将这些项目设置为“从父项目或项目默认值继承”修复了这个问题。感谢所有的答复。

是什么让你觉得它不起作用?图像可能会加载在相同的地址,纯粹是因为系统决定在那里加载它,而不是因为请求放在那里,所以第二个加载应该在不同的地址,只要第二个加载不是在重启。 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