Я хочу увидеть, как флаг защиты от 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> Включено
Чтобы включить это изменение, также необходимо внести три дополнительных изменения:
- Измените с / 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 была тестируемой. Помогите, пожалуйста.