/Qspectre-load-cf
Specifica la generazione del compilatore di istruzioni di serializzazione per ogni istruzione del flusso di controllo che contiene un carico. Questa opzione esegue un subset delle mitigazioni eseguite dall'opzione /Qspectre-load .
Sintassi
/Qspectre-load-cf
Osservazioni:
/Qspectre-load-cf fa sì che il compilatore rilevi JMP
le istruzioni del flusso di controllo , RET
e CALL
che caricano dalla memoria e inserisca istruzioni di serializzazione dopo il caricamento. Se possibile, queste istruzioni vengono suddivise in un carico e in un trasferimento del flusso di controllo. Il carico è seguito da un oggetto LFENCE
per assicurarsi che il carico sia protetto. In alcuni casi il compilatore non può suddividere le istruzioni, ad esempio l'istruzione JMP
, quindi usa una tecnica di mitigazione alternativa. Ad esempio, il compilatore attenua jmp [rax]
aggiungendo istruzioni per caricare la destinazione in modo non distruttivo prima di inserire un LFENCE, come illustrato di seguito:
xor rbx, [rax]
xor rbx, [rax] ; force a load of [rax]
lfence ; followed by an LFENCE
jmp [rax]
Poiché /Qspectre-load-cf arresta la speculazione di tutti i carichi nelle istruzioni del flusso di controllo, l'impatto sulle prestazioni è elevato. La mitigazione non è appropriata ovunque. Se sono presenti blocchi critici per le prestazioni del codice che non richiedono la protezione, è possibile disabilitare queste mitigazioni usando __declspec(spectre(nomitigation))
.
L'opzione /Qspectre-load-cf è disattivata per impostazione predefinita e supporta tutti i livelli di ottimizzazione.
L'opzione /Qspectre-load-cf è disponibile in Visual Studio 2019 versione 16.5 e successive. Questa opzione è disponibile solo nei compilatori destinati a processori x86 e x64. Non è disponibile nei compilatori destinati ai processori ARM.
Per impostare l'opzione del compilatore nell'ambiente di sviluppo di Visual Studio
Aprire la finestra di dialogo Pagine delle proprietà del progetto. Per informazioni dettagliate, vedere Impostare il compilatore e le proprietà di compilazione.
Selezionare la pagina delle proprietà Proprietà>di configurazione C/C++>Generazione codice.
Selezionare un nuovo valore per la proprietà Spectre Mitigation . Scegliere OK per applicare la modifica.
Per impostare l'opzione del compilatore a livello di codice
- Vedere AdditionalOptions.
Vedi anche
/Qspectre
/Qspectre-jmp
/Qspectre-load
Opzioni /Q (operazioni di basso livello)
Opzioni del compilatore MSVC
Sintassi della riga di comando del compilatore MSVC