哪些CPU支持Intel CET?
Intel CET技术在最近的Tiger Lake架构CPU上受到了支持(here)。比如至强中的Intel® Xeon® W-11955M Processor、酷睿中的英特尔® 酷睿™ i7-1185G7E 处理器。
如下图所示“控制流强制技术”
Intel CET的作用及endbr64指令
Intel CET提供了影子栈及间接跳转指令追踪功能,保护控制流完整性(wiki: here)。
Intel CET相关的指令如endbr64是后向(backward)兼容的。
在Intel CET中,间接跳转的处理逻辑中被插入一段过程:将CPU状态从DLE切换成WAIT_FOR_ENDBRANCH。
在间接跳转之后查看下一条指令是不是endbr64。如果指令是endbr64指令,那么该指令会将CPU状态从WAIT_FOR_ENDBRANCH恢复成DLE。另一方面,如果下一条指令不是endbr64,说明程序可能被控制流劫持了,CPU就报错(#CP)。因为按照正确的逻辑,间接跳转后应该需要有一条对应的endbr64指令来回应间接跳转,如果不是endbr64指令,那么程序控制流可能被劫持并前往其它地址(其它任意地址上是以非endbr64开始的汇编代码)(涉及编译器兼容CPU新特性)。