【问题标题】:How to disable DYNAMICBASE in msbuild vcxproj如何在 msbuild vcxproj 中禁用 DYNAMICBASE
【发布时间】:2021-04-30 21:02:52
【问题描述】:

我想通过 msbuild 用于编译项目的 vcxproj 文件将链接器选项 /DYNAMICBASE:no 传递给 msvc 链接器。

如果有人想复制我的失败,我正在使用this vcxproj file 编译 bitcoind,使用此命令构建项目: msbuild bitcoind/bitcoind.vcxproj /p:Platform=x64 /p:Configuration=Release /t:build 虽然在针对已编译的 exe 运行 dumpbin \headers 时项目成功构建,但我得到的输出包含:

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,因为我想验证这只是设置动态库的问题。

  <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

【问题讨论】:

    标签: c++ msbuild linker bitcoin aslr


    【解决方案1】:

    要在.vcxproj 文件中关闭/DYNAMICBASE,请在&lt;ItemGroup&gt; 列表之前插入以下内容。

      <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
        <Link>
          <RandomizedBaseAddress>false</RandomizedBaseAddress>
        </Link>
      </ItemDefinitionGroup>
    

    要将其应用于所有版本,而不仅仅是发布 x64,请删除 Condition= 部分。

    /DYNAMICBASE 关闭时,/HIGHENTROPYVA 无效,但特征位仍可能在标头中设置。要关闭它,请在 &lt;RandomizedBaseAddress&gt; 行旁边添加 &lt;AdditionalOptions&gt;/HIGHENTROPYVA:NO%(AdditionalOptions)&lt;/AdditionalOptions&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-03
      • 1970-01-01
      • 2011-12-17
      • 1970-01-01
      • 2010-10-20
      • 2017-07-14
      相关资源
      最近更新 更多