/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 保护。 当对 cl 命令指定 /guard:cf 选项以一次性完成编译和链接时,编译器会将标志传递给链接器。 当在 Visual Studio 中设置了“控制流防护”属性时,将向编译器和链接器传递 /GUARD:CF 选项。 当单独编译对象文件或库时,必须在 link 命令中显式指定选项。

在 Visual Studio 中设置此链接器选项

  1. 打开项目的“属性页”对话框。 有关详细信息,请参阅设置编译器和生成属性

  2. 选择“配置属性”>“链接器”>“命令行”属性页 。

  3. 在“其他选项”中,输入 /GUARD:CF 选择“确定”或“应用”以保存更改。

以编程方式设置此链接器选项

另请参阅

/guard(启用控制流保护)
MSVC 链接器参考
MSVC 链接器选项