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

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

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

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

Здесь представлены последние примечания к выпуску от Microsoft для VS 2017.

Отредактировать в вопрос: 23 августа 2018 г.

В поисках ответа я попробовал следующую кодовую форму страницы 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;
}

Когда я компилирую код с включенным флагом защиты от Spectre:

Свойства проекта> Свойства конфигурации> C / C ++> Spectre Mitigation> Включено

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

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

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


person Ganesh Kamath - 'Code Frenzy'    schedule 21.08.2018    source источник
comment
Вы перешли по ссылке и прочитали страницу? В нем рассказывается, как установить эти библиотеки. Они не обязательны.   -  person Retired Ninja    schedule 23.08.2018


Ответы (2)


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

Пример Microsoft

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

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

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

person Ganesh Kamath - 'Code Frenzy'    schedule 23.08.2018

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

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

person act1vand0    schedule 03.06.2019