Как проверить, работает ли флаг ослабления призрака, используемый в Visual Studio 2017, для C++?

Я хочу посмотреть, как флаг смягчения призрака решил проблему, чтобы убедить мою команду, что нам нужно добавить этот флаг в нашу большую базу кода для будущих проектов.

Я ищу образцы проектов, которые имеют уязвимость в спектре и устраняются путем добавления флага уменьшения спектра, представленного на прошлой неделе в Visual Studio 2017.

Может ли кто-нибудь помочь мне с демонстрацией POC для моей большой команды о том, как недавно добавленная поддержка Microsoft в Visual Studio преодолевает проблему?

Вот последние заметки о выпуске от Microsoft для VS 2017.

Изменить на вопрос: 23 августа 2018 г.

В погоне за ответом я попробовал следующую кодовую форму майкрософт по смягчению последствий призрака:

#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++ > Призрачное смягчение> Включено

Три дополнительных изменения также необходимо сделать, чтобы включить это изменение:

  1. Изменить с /Od на /O2 в оптимизации

Свойства проекта> Свойства конфигурации> C/C++ > Оптимизация> /O2

  1. Базовые проверки времени выполнения по умолчанию

Свойства проекта> Свойства конфигурации> C/C++ > Генерация кода> Базовые проверки времени выполнения> По умолчанию

  1. Добавлен каталог библиотеки 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: Включено уменьшение спектра, но библиотеки, устраняющие воздействие, не найдены, Убедитесь, что рабочая нагрузка Visual Studio включает смягченные библиотеки Spectre. Смотрите https://aka.ms/Ofhn4c для получения дополнительной информации.

Я не знаю, что делать на этом этапе. Я получаю выходной исполняемый файл, но хочу, чтобы функция смягчения Spectre была тестируемой. Пожалуйста, помогите мне.

1 ответ

Я изменил VS 2017 Installer и сравнил мою установку с выбранными по умолчанию элементами на странице Microsoft для " Спекуляция".

Пример Microsoft

Компоненты, которые были пропущены в предыдущей установке VS 2017

Я не заметил вкладку "Отдельные компоненты". Во вкладке я пропустил некоторые важные зависимости (спасибо @Retired Ninja). После установки это сообщение перестало появляться в сборке для примера смягчения призрака.

Тем не менее, я все еще ищу более конкретный вариант использования.

В следующей статье содержится интересное обсуждение семейства уязвимостей Spectre и предоставляется образец кода для тестирования методов устранения рисков Visual Studio. Возможно, вы сможете использовать часть этого кода, чтобы собрать конкретный пример (хотя эксплуатация может быть довольно сложной).

https://www.paulkocher.com/doc/MicrosoftCompilerSpectreMitigation.html

Другие вопросы по тегам