我在VS 2022中开始了一个新项目,我正在经历一些选项来建立我的项目。我看到了CET的影子堆栈,被吸引住了。看起来这是英特尔的硬件安全功能,但我很难找到任何关于我的程序是否兼容的信息。阴影堆栈只会影响性能吗?作为一个程序员,它对我提出了什么额外的要求吗?什么时候才能使用影子堆栈?我只是做游戏项目使用c++的乐趣,而不是设计驱动程序或任何严重的后果(目前)。
我读取关于影子堆栈的英特尔文章并收集它,复制堆栈并进行一些验证。这就是它的作用吗?如果是的话,它是如何做到的?我希望有一个解释或链接到更多的有关这一主题的来源。
发布于 2022-01-30 00:59:38
我如何知道我的程序是否与(/CETCOMPAT)兼容?
要么在有CET的系统上运行它,要么在标志上运行,并确保它不会崩溃。
阴影堆栈只会影响性能吗?
因为它是在硬件中实现的,它甚至不应该影响性能。如果您的程序正确地支持它,它将永远不会被注意到,除非它成功地防止了攻击。
作为一个程序员,它对我提出了什么额外的要求吗?
除非您正在手工编写程序集,并且在其中执行一些奇怪的操作,比如有一个与call
配对的pop
,或者一个与ret
配对的push
。(关于这样一个奇怪的程序集的例子,请看一下是否可以暂时取消Intel CET的单个ret指令,或者以其他方式与其一起使用retpolines?。)
什么时候才能使用影子堆栈?
当您的编译器和平台支持它时,应该使用它。这是一种安全的增加,基本上没有坏处。
它复制堆栈并进行一些验证。这就是它的作用吗?如果是的话,它是如何做到的?
它保存了只受call
、ret
和新的专门的影子堆栈指令(如incsspq
和wrssq
)影响的堆栈的第二个副本。当执行ret
时,如果实际堆栈上的地址与影子堆栈上的地址不匹配,那么您的程序就会在被黑客攻击的假设下被杀死。
https://stackoverflow.com/questions/70884589
复制相似问题