Freigeben über


/Qspectre-load

Gibt die Compilergenerierung von Serialisierungsanweisungen für jede Ladeanweisung an. Mit dieser Option wird das Flag "/Qspectre " erweitert, das auf Lasten basierend auf Lasten gegen mögliche spekulative Ausführungs-Side-Channel-Angriffe abgemildert wird.

Syntax

/Qspectre-load

Hinweise

/Qspectre-load bewirkt, dass der Compiler Ladevorgänge aus dem Arbeitsspeicher erkennt und nach ihnen Serialisierungsanweisungen einfügt. Steuerungsflussanweisungen, die Arbeitsspeicher laden, einschließlich RET und CALL, werden 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 Ablaufanweisungen für die Steuerung aufteilen 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 die Spekulation aller Lasten beendet, ist die Leistungsauswirkung 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)). Weitere Informationen finden Sie unter __declspec Spectre.

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

Die Option "/Qspectre-load " 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-cf
/Q-Optionen (Vorgänge auf niedriger Ebene)
MSVC-Compileroptionen
Syntax für die MSVC-Compilerbefehlszeile