I试图在cmake中启用Q谱和控制流保护(安全设置)。如何使用cmakefile在cmake中启用这些设置?
Q谱和控制流保护选项都是Visual 2017的安全开关。QSpectre“指定编译器生成指令以减轻某些谱变体1安全漏洞”,控制流保护“使编译器在编译时分析间接调用目标的控制流”。
这两者本质上都是针对安全漏洞的编译器选项。
目前,我正尝试在主cmakefile中使用这两个选项来实现:
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 )检查安全漏洞:
发布于 2018-11-26 21:32:37
为了启用控制流保护和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进行编译,这将产生问题并抛出错误。
在这种情况下,如果链接模块来自外部存储库,那么除了承认链接库中的漏洞并继续前进之外,您无能为力。
https://stackoverflow.com/questions/53160599
复制相似问题