Freigeben über


/Qspectre-load-cf

Gibt die Compilergenerierung von Serialisierungsanweisungen für jede Steuerungsflussanweisung an, die eine Last enthält. Diese Option führt eine Teilmenge der Gegenmaßnahmen durch die Option "/Qspectre-load " aus.

Syntax

/Qspectre-load-cf

Hinweise

/Qspectre-load-cf bewirkt, dass der Compiler Anweisungen zum Steuern und CALL Fluss erkenntJMPRET, die aus dem Speicher geladen werden, und zum Einfügen von Serialisierungsanweisungen nach dem Laden. Wenn möglich, werden diese Anweisungen in eine Last und eine Steuerungsflussübertragung aufgeteilt. Auf die Last folgt eine LFENCE , um sicherzustellen, dass die Last geschützt ist. Es gibt Fälle, in denen der Compiler keine Anweisungen teilen kann, z. B. die JMP Anweisung, sodass er eine alternative Gegenmaßnahmesmethode verwendet. Beispielsweise entschärft jmp [rax] der Compiler durch Hinzufügen von Anweisungen, um das Ziel nicht destruktiv zu laden, bevor eine LFENCE eingefügt wird, wie hier gezeigt:

    xor rbx, [rax]
    xor rbx, [rax]  ; force a load of [rax]
    lfence          ; followed by an LFENCE
    jmp [rax]

Da /Qspectre-load-cf stoppt Spekulationen aller Lasten in Steuerungsflussanweisungen, ist die Leistungsbeeinträchtigung hoch. Die Entschärfung ist nicht überall geeignet. Wenn leistungskritische Codeblöcke vorhanden sind, die keinen Schutz erfordern, können Sie diese Entschärfungen mithilfe von __declspec(spectre(nomitigation)).

Die /Qspectre-load-cf -Option ist standardmäßig deaktiviert und unterstützt alle Optimierungsstufen.

Die /Qspectre-load-cf -Option ist in Visual Studio 2019, Version 16.5 und höher, verfügbar. Diese Option ist nur in Compilern verfügbar, die auf x86- und x64-Prozessoren abzielen. Es ist nicht in Compilern verfügbar, die auf ARM-Prozessoren abzielen.

So legen Sie diese Compileroption in der Visual Studio-Entwicklungsumgebung fest

  1. Öffnen Sie das Dialogfeld Eigenschaftenseiten des Projekts. Weitere Informationen erhalten Sie unter Set C++ compiler and build properties in Visual Studio (Festlegen der Compiler- und Buildeigenschaften (C++) in Visual Studio).

  2. Wählen Sie die Eigenschaftenseite Konfigurationseigenschaften>C/C++>Codegenerierung aus.

  3. Wählen Sie einen neuen Wert für die Spectre Mitigation-Eigenschaft aus . Wählen Sie OK aus, um die Änderung zu übernehmen.

So legen Sie diese Compileroption programmgesteuert fest

Siehe auch

/Qspectre
/Qspectre-jmp
/Qspectre-load
/Q-Optionen (Vorgänge auf niedriger Ebene)
MSVC-Compileroptionen
Syntax für die MSVC-Compilerbefehlszeile