如何在 msbuild vcxproj 中禁用 DYNAMICBASE
How to disable DYNAMICBASE in msbuild vcxproj
我想通过 msbuild 用于编译项目的 vcxproj 文件将链接器选项 /DYNAMICBASE:no
传递给 msvc 链接器。
如果有人想复制我的失败,我正在使用 this vcxproj file 编译 bitcoind,使用此命令构建项目:
msbuild bitcoind/bitcoind.vcxproj /p:Platform=x64 /p:Configuration=Release /t:build
当 运行 dumpbin \headers
针对已编译的 exe 成功构建项目时,我得到的输出包含:
8160 DLL characteristics
High Entropy Virtual Addresses
Dynamic base
NX compatible
Terminal Server Aware
我已尝试根据 "Passing /highentropyva- to CSC compiler from MSBuild command-line or project file". 修改 vcxproj 文件请注意,下面的更改还包括 HighEntropyVA
因为我想验证这只是设置 dynamicbase 的问题。
<PropertyGroup Label="Globals">
<FileAlignment>
<HighEntropyVA>False</HighEntropyVA>
</FileAlignment>
<Link>
<DynamicBase>False</DynamicBase>
</Link>
<ProjectGuid>{D4513DDF-6013-44DC-ADCC-12EAF6D1F038}</ProjectGuid>
</PropertyGroup>
我还尝试使用 "How to pass linker options to msbuild via command line?". 的答案来实现此功能,因此我创建了以下道具文件:
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemDefinitionGroup>
<Link>
<DynamicBase>False</DynamicBase>
<HighEntropyVA>False</HighEntropyVA>
</Link>
</ItemDefinitionGroup>
</Project>
然后使用命令添加到构建中:
msbuild bitcoind/bitcoind.vcxproj /p:Platform=x64 /p:Configuration=Release /t:build /p:ForceImportBeforeCppTargets=profile.props
要关闭 .vcxproj
文件中的 /DYNAMICBASE
,请在 <ItemGroup>
列表前插入以下内容。
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Link>
<RandomizedBaseAddress>false</RandomizedBaseAddress>
</Link>
</ItemDefinitionGroup>
要将其应用于所有版本,而不仅仅是发布 x64,请删除 Condition=
部分。
当/DYNAMICBASE
关闭时,/HIGHENTROPYVA
无效,虽然特征位可能仍然设置在头部。要关闭它,请在 <RandomizedBaseAddress>
行旁边添加 <AdditionalOptions>/HIGHENTROPYVA:NO%(AdditionalOptions)</AdditionalOptions>
。
我想通过 msbuild 用于编译项目的 vcxproj 文件将链接器选项 /DYNAMICBASE:no
传递给 msvc 链接器。
如果有人想复制我的失败,我正在使用 this vcxproj file 编译 bitcoind,使用此命令构建项目:
msbuild bitcoind/bitcoind.vcxproj /p:Platform=x64 /p:Configuration=Release /t:build
当 运行 dumpbin \headers
针对已编译的 exe 成功构建项目时,我得到的输出包含:
8160 DLL characteristics
High Entropy Virtual Addresses
Dynamic base
NX compatible
Terminal Server Aware
我已尝试根据 "Passing /highentropyva- to CSC compiler from MSBuild command-line or project file". 修改 vcxproj 文件请注意,下面的更改还包括 HighEntropyVA
因为我想验证这只是设置 dynamicbase 的问题。
<PropertyGroup Label="Globals">
<FileAlignment>
<HighEntropyVA>False</HighEntropyVA>
</FileAlignment>
<Link>
<DynamicBase>False</DynamicBase>
</Link>
<ProjectGuid>{D4513DDF-6013-44DC-ADCC-12EAF6D1F038}</ProjectGuid>
</PropertyGroup>
我还尝试使用 "How to pass linker options to msbuild via command line?". 的答案来实现此功能,因此我创建了以下道具文件:
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemDefinitionGroup>
<Link>
<DynamicBase>False</DynamicBase>
<HighEntropyVA>False</HighEntropyVA>
</Link>
</ItemDefinitionGroup>
</Project>
然后使用命令添加到构建中:
msbuild bitcoind/bitcoind.vcxproj /p:Platform=x64 /p:Configuration=Release /t:build /p:ForceImportBeforeCppTargets=profile.props
要关闭 .vcxproj
文件中的 /DYNAMICBASE
,请在 <ItemGroup>
列表前插入以下内容。
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Link>
<RandomizedBaseAddress>false</RandomizedBaseAddress>
</Link>
</ItemDefinitionGroup>
要将其应用于所有版本,而不仅仅是发布 x64,请删除 Condition=
部分。
当/DYNAMICBASE
关闭时,/HIGHENTROPYVA
无效,虽然特征位可能仍然设置在头部。要关闭它,请在 <RandomizedBaseAddress>
行旁边添加 <AdditionalOptions>/HIGHENTROPYVA:NO%(AdditionalOptions)</AdditionalOptions>
。