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根本不会尝试随机化,它只会在第一个可用插槽中加载它
一个提示是我可以在vsprops文件中指定'RandomizedBaseAddress =“xxxxx”'这个事实,它没有给我任何错误。 – fbrereto 2010-10-18 18:28:41
最简单的检查方法是运行dumpbin/headers并查看头文件是否包含“Dynamic Base”DLL特征。 – EricLaw 2010-10-18 18:28:45
@fbrereto:那根本没有证据,它可以将所有非零值视为true,因为它是我在MSVC中看到的唯一选项,它将图像标记为与ASLR不兼容。唯一不错的测试方法是使用调试器/ GetModuleHandle检查头文件或更好地检查实际的加载地址(如果图像具有固定的基础,并且未标记为不兼容,则ASLR实际上仍然会启动) – Necrolis 2010-10-18 18:34:54