Bagikan melalui


/Qspectre-load-cf

Menentukan pembuatan pengkompilasi instruksi serialisasi untuk setiap instruksi alur kontrol yang berisi beban. Opsi ini melakukan subset mitigasi yang dilakukan oleh opsi /Qspectre-load .

Sintaks

/Qspectre-load-cf

Keterangan

/Qspectre-load-cf menyebabkan pengkompilasi mendeteksi JMP, , RETdan CALL instruksi aliran kontrol yang memuat dari memori, dan menyisipkan instruksi serialisasi setelah beban. Jika memungkinkan, instruksi ini dibagi menjadi beban dan transfer alur kontrol. Beban diikuti oleh LFENCE untuk memastikan beban dilindungi. Ada kasus di mana pengkompilasi tidak dapat membagi instruksi, seperti JMP instruksi, sehingga menggunakan teknik mitigasi alternatif. Misalnya, kompilator jmp [rax] mengurangi dengan menambahkan instruksi untuk memuat target secara nondestructive sebelum menyisipkan LFENCE, seperti yang ditunjukkan di sini:

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

Karena /Qspectre-load-cf menghentikan spekulasi semua beban dalam instruksi aliran kontrol, dampak performanya tinggi. Mitigasi tidak sesuai di mana-mana. Jika ada blok kode penting performa yang tidak memerlukan perlindungan, Anda dapat menonaktifkan mitigasi ini dengan menggunakan __declspec(spectre(nomitigation)).

Opsi /Qspectre-load-cf nonaktif secara default, dan mendukung semua tingkat pengoptimalan.

Opsi /Qspectre-load-cf tersedia di Visual Studio 2019 versi 16.5 dan yang lebih baru. Opsi ini hanya tersedia di pengkompilasi yang menargetkan prosesor x86 dan x64. Ini tidak tersedia di pengkompilasi yang menargetkan prosesor ARM.

Untuk mengatur opsi pengkompilasi ini di lingkungan pengembangan Visual Studio

  1. Buka kotak dialog Halaman Properti proyek. Untuk detailnya, lihat Mengatur pengkompilasi C++ dan membuat properti di Visual Studio.

  2. Pilih halaman properti Properti>Konfigurasi C/C++>Code Generation.

  3. Pilih nilai baru untuk properti Spectre Mitigation . Pilih OK untuk menerapkan perubahan.

Untuk mengatur opsi pengkompilasi ini secara terprogram

Lihat juga

/Qspectre
/Qspectre-jmp
/Qspectre-load
Opsi /Q (Operasi tingkat rendah)
Opsi pengkompilasi MSVC
Sintaks baris perintah pengkompilasi MSVC