/Qspectre-load
Задает создание инструкций сериализации для каждой инструкции загрузки компилятора. Этот параметр расширяет флаг /Qspectre , смягчая любые возможные спекулятивные атаки на стороне канала на основе нагрузки.
Синтаксис
/Qspectre-load
Замечания
/Qspectre-load приводит компилятору обнаруживать нагрузки из памяти и вставлять инструкции сериализации после них. Инструкции по потоку управления, которые загружают память, включая RET
и CALL
, разделяются на нагрузку и передачу потока управления. За нагрузкой LFENCE
следует, чтобы обеспечить защиту нагрузки. Существуют случаи, когда компилятор не может разделить инструкции потока управления, например jmp
инструкцию, поэтому он использует альтернативный метод устранения рисков. Например, компилятор уменьшается jmp [rax]
путем добавления инструкций по загрузке целевого недеструктивного объекта перед вставкой LFENCE, как показано ниже:
xor rbx, [rax]
xor rbx, [rax] ; force a load of [rax]
lfence ; followed by an LFENCE
jmp [rax]
Так как /Qspectre-load останавливает спекуляции всех нагрузок , производительность влияет на высокую производительность. Устранение рисков не подходит везде. Если есть критически важные блоки кода, которые не требуют защиты, можно отключить эти способы устранения рисков с помощью __declspec(spectre(nomitigation))
. Дополнительные сведения см. в __declspec спецификации.
Параметр /Qspectre-load отключен по умолчанию и поддерживает все уровни оптимизации.
Параметр /Qspectre-load доступен в Visual Studio 2019 версии 16.5 и более поздних версий. Этот параметр доступен только в компиляторах, предназначенных для процессоров x86 и x64. Он недоступен в компиляторах, предназначенных для процессоров ARM.
Установка данного параметра компилятора в среде разработки Visual Studio
Откройте диалоговое окно Страницы свойств проекта. Подробнее см. в статье Настройка компилятора C++ и свойства сборки в Visual Studio.
Перейдите на страницу свойств Свойства конфигурации>C/C++>Создание кода.
Выберите новое значение для свойства "Устранение рисков Spectre". Чтобы применить изменение, нажмите кнопку ОК.
Установка данного параметра компилятора программным способом
- См. раздел AdditionalOptions.
См. также
/Qspectre
/Qspectre-jmp
/Qspectre-load-cf
/Q (низкоуровневые операции)
Параметры компилятора MSVC
Синтаксис командной строки компилятора MSVC