Share via


/GUARD (啟用防護檢查)

告知連結是否支援可執行檔映射中的控制流程防護檢查。

語法

/GUARD:CF
/GUARD:NO

備註

連結 /GUARD:CF 器選項會修改 DLL 或 EXE 檔案的標頭,以指出支援控制流程防護 (CFG) 執行時間檢查。 連結器也會將所需的控制項流程目標位址資料加入標頭。 /GUARD:CF預設為停用。 您可以使用 明確停用 /GUARD:NO 它。 若要有效, /GUARD:CF 也需要預設開啟的 /DYNAMICBASE [使用位址空間配置隨機化] 連結器選項。

使用 /guard:cf 編譯器選項編譯原始程式碼時,編譯器會檢查可能目標位址的所有間接呼叫,以分析控制流程。 編譯器會插入程式碼,在執行階段確認間接呼叫指令的目標位址位於已知目標位址的清單中。 支援 CFG 的作業系統會停止無法通過 CFG 執行階段檢查的程式。 這項檢查可讓攻擊者使用資料損毀來變更呼叫目標,更難執行惡意程式碼。

/GUARD:CF您必須將 選項指定給編譯器和連結器,才能建立已啟用 CFG 的可執行映射。 使用 /GUARD:CF 編譯但未連結的程式碼會產生執行時間檢查的成本,但不會啟用 CFG 保護。 當選項 /guard:cf 指定給 cl 命令以在一個步驟中編譯和連結時,編譯器會將旗標傳遞至連結器。 在 Visual Studio 中設定 Control Flow Guard 屬性時, /GUARD:CF 選項會傳遞至編譯器和連結器。 當個別編譯物件檔案或程式庫時,必須在 命令中 link 明確指定 選項。

在 Visual Studio 中設定這個連結器選項

  1. 開啟專案的 [ 屬性頁 ] 對話方塊。 如需詳細資訊,請參閱 設定編譯器和建置屬性

  2. 選取 [ 組態屬性 > 連結器 > 命令列 ] 屬性頁。

  3. [其他選項] 中,輸入 /GUARD:CF 。 選擇 [確定 ] 或 [ 套用 ] 以儲存您的變更。

若要以程式設計方式設定這個連結器選項

另請參閱

/guard (啟用控制流程防護)
MSVC 連結器參考
MSVC 連結器選項