使用Visual C ++ 2015及更高版本中的选项/guard
,我们可以为我们的程序启用 Control Flow Guard (与/ZI
和/clr
不兼容,但没关系。)
CFG究竟是什么?文章还谈到了 CFG感知操作系统 - 什么是CFG感知操作系统?有this article,但我无法理解。
显示启用CFG的程序的影响/效果的任何代码示例(除了下面粘贴的简单代码)?
含糊地说,我注意到如果通过(函数)指针调用某个函数,并且地址无效,它将终止应用程序?是吗?内核干预怎么样,mentioned here。
示例代码,我用过:
void Crash()
{
void *pff = new int;
__try
{
((void(*)())pff)();
}
__except (EXCEPTION_EXECUTE_HANDLER)
{
std::cout << "Crash";
}
}
如果未启用/ guard,则会显示“Crash”,否则会导致程序崩溃。 那是吗? - 或其他任何东西(因为内核扮演重要角色,程序头将启用CFG,我认为还必须有其他东西)。