我想看看幽灵缓解标志如何解决一个问题,以说服我的团队我们需要将此标志添加到我们即将进行的项目的大型代码库中。
我正在搜索具有幽灵漏洞的示例项目,并通过添加上周在 Visual Studio 2017 中引入的幽灵缓解标志来解决。
有人可以帮助我通过 POC 向我的更大团队演示,了解 Microsoft 最近在 Visual Studio 中添加的支持如何克服这个问题吗?
这是 Microsoft 为 VS 2017 提供的最新版本说明。
编辑问题:2018 年 8 月 23 日
在寻求答案的过程中,我尝试了以下代码形式的 microsoft Spectre Mitigation 页面:
#include "stdafx.h"
int G, G1, G2;
__forceinline
int * bar(int **p, int i)
{
return p[i];
}
__forceinline
void bar1(int ** p, int i)
{
if (i < G1) {
auto x = p[i]; // mitigation here
G = *x;
}
}
__forceinline
void foo(int * p)
{
G = *p;
}
void baz(int ** p, int i)
{
if (i < G1) {
foo(bar(p, i + G2));
}
bar1(p, i);
}
int main()
{
return 0;
}
当我在启用幽灵缓解标志的情况下编译代码时:
项目属性 > 配置属性 > C/C++ > Spectre 缓解 > 已启用
还需要进行三项额外的更改来合并此更改:
- 在优化中从 /Od 更改为 /O2
项目属性 > 配置属性 > C/C++ > 优化 > /O2
- 基本运行时检查为默认值
项目属性 > 配置属性 > C/C++ > 代码生成 > 基本运行时检查 > 默认
- 将 VC 库目录添加到链接器路径
项目属性 > 配置属性 > 链接器 > 常规 > 附加库目录 > C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\lib\x86
注意:而不是像这样硬编码路径
C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\lib\x86
,您可以像这样使用 Visual Studio 变量:
$(VCToolsInstallDir)\lib\x86\
我得到以下输出:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\VC\VCTargets\Microsoft.CppBuild.targets(402,5): 警告 MSB8038: Spectre 缓解已启用但 Spectre 缓解库未找到. 验证 Visual Studio 工作负载是否包含 Spectre 缓解库。有关详细信息,请参阅https://aka.ms/Ofhn4c 。
我现在不知道该怎么办。我得到了一个输出可执行文件,但我希望 Spectre 缓解功能是可测试的。请帮我。