我怎么知道我的程序是否兼容 CET Shadow Stack(/CETCOMPAT)?

How do I know if my program is CET Shadow Stack(/CETCOMPAT) compatible?

我正在 VS 2022 中开始一个新项目,我正在通过各种选项来设置我的项目。我看到了 CET Shadow Stack 并且很感兴趣。看起来这是英特尔的硬件安全功能,但我无法轻易找到任何关于我的程序是否兼容的信息。阴影堆栈是否只影响性能?它对我作为程序员有什么额外的要求吗?什么时候会使用阴影堆栈?我只是为了好玩而使用 C++ 制作游戏项目,而不是设计驱动程序或任何具有严重后果的东西(目前)。

我阅读了 Intel article on the Shadow Stack 并收集了它复制堆栈并进行了一些验证。这就是它所做的一切吗?如果是这样,它是如何做到的?如果能提供有关该主题的更多资源的解释或链接,我将不胜感激。

How do I know if my program is CET Shadow Stack(/CETCOMPAT) compatible?

要么 运行 在具有 CET 的系统上,要么 run it inside of Intel SDE with the -cet flag,并确保它不会崩溃。

Does shadow stack just affect performance?

由于它是在硬件中实现的,因此应该不会影响性能。如果您的程序正确支持它,除非它成功阻止了漏洞利用,否则它永远不会被注意到。

Does it put any additional requirements on me as a programmer?

除非你手写汇编,并且在其中做一些奇怪的事情,比如 callpop 配对,或者 pushpush 配对一个ret。 (有关这种奇怪装配的示例,请查看 。)

When would one use shadow stack?

只要您的编译器和平台支持它,您就应该使用它。它增加了安全性,基本上没有缺点。

it copies the stack and does some verification. Is that all it does? If so, how does it do that?

它保留了仅受 callret 和新的专用 shadow-stack 指令(如 incsspqwrssq 影响的堆栈的第二个副本.当 ret 执行时,如果真实堆栈上的地址与影子堆栈上的地址不匹配,那么您的程序将被终止,假设它已被黑客入侵。