为了启用Control Flow Guard和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标志是使用动态库设置和编译的,但是为项目链接的库可能无法使用Control Flow Guard或Qspectre进行编译,这会产生问题并抛出错误。
*.dll
.dll
在这种情况下,如果它们链接的模块来自外部存储库,那么除了确认链接库中的漏洞并继续之外,您无能为力。