Как проверить, работает ли флаг ослабления призрака, используемый в 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++ > Призрачное смягчение> Включено
Три дополнительных изменения также необходимо сделать, чтобы включить это изменение:
- Изменить с /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: Включено уменьшение спектра, но библиотеки, устраняющие воздействие, не найдены, Убедитесь, что рабочая нагрузка Visual Studio включает смягченные библиотеки Spectre. Смотрите https://aka.ms/Ofhn4c для получения дополнительной информации.
Я не знаю, что делать на этом этапе. Я получаю выходной исполняемый файл, но хочу, чтобы функция смягчения Spectre была тестируемой. Пожалуйста, помогите мне.
1 ответ
Я изменил VS 2017 Installer и сравнил мою установку с выбранными по умолчанию элементами на странице Microsoft для " Спекуляция".
Я не заметил вкладку "Отдельные компоненты". Во вкладке я пропустил некоторые важные зависимости (спасибо @Retired Ninja). После установки это сообщение перестало появляться в сборке для примера смягчения призрака.
Тем не менее, я все еще ищу более конкретный вариант использования.
В следующей статье содержится интересное обсуждение семейства уязвимостей Spectre и предоставляется образец кода для тестирования методов устранения рисков Visual Studio. Возможно, вы сможете использовать часть этого кода, чтобы собрать конкретный пример (хотя эксплуатация может быть довольно сложной).
https://www.paulkocher.com/doc/MicrosoftCompilerSpectreMitigation.html