Для включения 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, будут создавать проблемы и выдавать ошибки.
В этом случае, если связанные модули взяты из внешних репозиториев, вы ничего не можете сделать, кроме как признать уязвимости в связанных библиотеках и двигаться дальше.