Visual c++ MSVC链接器赢得';t通过vsprops文件应用随机基地址

Visual c++ MSVC链接器赢得';t通过vsprops文件应用随机基地址,visual-c++,vsprops,aslr,Visual C++,Vsprops,Aslr,我正在尝试使用vsprops文件将ASLR添加到项目中。我已经验证了项目正在使用该文件,因为该文件中有其他正在应用的设置,并且故意破坏该文件会在MSVC下打开项目时产生错误。当我将ASLR设置为yes时,我可以在下看到RandomizedBaseAddress=“2”,您认为它不起作用的原因是什么?映像可能会加载到同一地址,这纯粹是因为系统决定将其加载到该地址,而不是因为它请求将其放置在该地址,但是第二次加载应该位于不同的地址,只要在重新启动后第二次加载没有完成。另外,ASLR仅适用于vista

我正在尝试使用vsprops文件将ASLR添加到项目中。我已经验证了项目正在使用该文件,因为该文件中有其他正在应用的设置,并且故意破坏该文件会在MSVC下打开项目时产生错误。当我将ASLR设置为
yes
时,我可以在
下看到
RandomizedBaseAddress=“2”
,您认为它不起作用的原因是什么?映像可能会加载到同一地址,这纯粹是因为系统决定将其加载到该地址,而不是因为它请求将其放置在该地址,但是第二次加载应该位于不同的地址,只要在重新启动后第二次加载没有完成。另外,ASLR仅适用于vista和更高版本,windows xp根本不会尝试将其随机化,它只会在第一个可用插槽加载它

什么让你认为它不起作用?映像可能会加载到同一地址,这纯粹是因为系统决定将其加载到该地址,而不是因为它请求将其放置在该地址,但是第二次加载应该位于不同的地址,只要在重新启动后第二次加载没有完成。此外,ASLR仅适用于vista和更高版本,windows xp根本不会尝试将其随机化,它只会将其加载到第一个可用插槽中,即项目文件为这些参数明确指定的“默认值”,从而覆盖vsprops文件。将这些项显式设置为“从父项或项目默认值继承”修复了该问题。感谢所有回复。

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

一个提示是,我可以在vsprops文件中指定
RandomizedBaseAddress=“xxxxx”
,它没有给我任何错误。最简单的检查方法是运行dumpbin/头,看看头是否包含“Dynamic Base”DLL特性。@fbrereto:这根本不是证据,它可以将所有非零值视为真,因为我在MSVC中看到的唯一选项是将图像标记为与ASLR不兼容。测试的唯一好方法是检查标头或更好的方法,使用调试器/GetModuleHandle检查实际加载地址(如果映像有固定的基址且未标记为不可兼容,ASLR实际上仍然可以启动)。一个提示是,我可以指定
RandomizedBaseAddress=“xxxxx”
在vsprops文件中,它没有给我任何错误。最简单的检查方法是运行dumpbin/headers,看看这些headers是否包含“Dynamic Base”DLL特性。@fbrereto:这根本不是证据,它可以将所有非零值都视为true,因为我在MSVC中看到的唯一选项是将图像标记为与ASLR不兼容。测试的唯一好方法是检查标头或更好的方法,使用调试器/GetModuleHandle检查实际加载地址(如果映像有固定的基并且没有标记为不可兼容,ASLR实际上仍然可以启动)