Поделиться через


/Qspectre-load-cf

Задает создание инструкций сериализации компилятора для каждой инструкции потока управления, содержащей нагрузку. Этот параметр выполняет подмножество мер, выполненных параметром /Qspectre-load .

Синтаксис

/Qspectre-load-cf

Замечания

/Qspectre-load-cf приводит компилятору обнаруживать JMPинструкции 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-cf останавливает спекуляции всех загрузок в инструкциях по потоку управления, производительность высока. Устранение рисков не подходит везде. Если есть критически важные блоки кода, которые не требуют защиты, можно отключить эти способы устранения рисков с помощью __declspec(spectre(nomitigation)).

Параметр /Qspectre-load-cf отключен по умолчанию и поддерживает все уровни оптимизации.

Qspectre-load-cf Параметр /доступен в Visual Studio 2019 версии 16.5 и более поздних версий. Этот параметр доступен только в компиляторах, предназначенных для процессоров x86 и x64. Он недоступен в компиляторах, предназначенных для процессоров ARM.

Установка данного параметра компилятора в среде разработки Visual Studio

  1. Откройте диалоговое окно Страницы свойств проекта. Подробнее см. в статье Настройка компилятора C++ и свойства сборки в Visual Studio.

  2. Перейдите на страницу свойств Свойства конфигурации>C/C++>Создание кода.

  3. Выберите новое значение для свойства "Устранение рисков Spectre". Чтобы применить изменение, нажмите кнопку ОК.

Установка данного параметра компилятора программным способом

См. также

/Qspectre
/Qspectre-jmp
/Qspectre-load
/Q (низкоуровневые операции)
Параметры компилятора MSVC
Синтаксис командной строки компилятора MSVC