C++ 在cmake中启用Qspectre和控制流量保护开关
我正在尝试在cmake中启用Qspectre和控制流防护(安全设置)。如何使用cmake文件在cmake中启用这些设置? 和选项都是Visual Studio 2017的安全开关。QSpectre“指定编译器生成指令以缓解某些Spectre variant 1安全漏洞”,Control Flow Guard“使编译器在编译时分析间接调用目标的控制流” 本质上,两者都是针对安全漏洞的编译器选项 目前,我正在尝试使用主CMAKE文件中的两个选项来实现:C++ 在cmake中启用Qspectre和控制流量保护开关,c++,c,visual-studio,cmake,C++,C,Visual Studio,Cmake,我正在尝试在cmake中启用Qspectre和控制流防护(安全设置)。如何使用cmake文件在cmake中启用这些设置? 和选项都是Visual Studio 2017的安全开关。QSpectre“指定编译器生成指令以缓解某些Spectre variant 1安全漏洞”,Control Flow Guard“使编译器在编译时分析间接调用目标的控制流” 本质上,两者都是针对安全漏洞的编译器选项 目前,我正在尝试使用主CMAKE文件中的两个选项来实现: if (MSVC AND NOT MSVC_
if (MSVC AND NOT MSVC_VERSION LESS 1900)
if (${use_control_flow_guard})
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /guard:cf")
SET(CMAKE_EXE_LINKER_FLAGS "/guard:cf /DYNAMICBASE")
endif()
if (${use_qspectre})
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /Qspectre")
endif()
endif()
此代码无法完成任务。从BinSkim(Microsoft二进制略读器)检查安全漏洞:
- 控制流保护: 错误BA2008:“***.dll”未启用控制流保护(CFG)缓解。要解决此问题,请在编译器和链接器命令行上传递/GUARD:CF。二进制文件还需要/DYNAMICBASE链接器选项才能启用CFG
- Qspectre: 以下模块是使用支持/Qspectre的工具集编译的,但未在命令行上启用该开关
if (MSVC AND (MSVC_VERSION GREATER 1900))
if (${use_control_flow_guard})
message("Setting CONTROL FLOW GUARD")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /guard:cf")
SET(CMAKE_EXE_LINKER_FLAGS "/guard:cf /DYNAMICBASE")
endif()
if (${use_qspectre})
message("Setting QSPECTRE")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /Qspectre")
endif()
endif()
由于BinSkim正在分析*.dll
文件,因此它还将检查.dll
中的链接模块。因此,CFG和Qspectre标志可能是使用动态库设置和编译的,但是为项目链接的库可能不是使用控制流保护或Qspectre编译的库将产生问题并抛出错误
在这种情况下,如果链接的模块来自外部存储库,那么除了确认链接库中的漏洞并继续操作之外,您无能为力。在哪里设置了
use\u control\u flow\u guard
变量?价值是多少?