首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我如何知道我的程序是否与(/CETCOMPAT)兼容?

我如何知道我的程序是否与(/CETCOMPAT)兼容?
EN

Stack Overflow用户
提问于 2022-01-27 19:26:58
回答 1查看 297关注 0票数 2

我在VS 2022中开始了一个新项目,我正在经历一些选项来建立我的项目。我看到了CET的影子堆栈,被吸引住了。看起来这是英特尔的硬件安全功能,但我很难找到任何关于我的程序是否兼容的信息。阴影堆栈只会影响性能吗?作为一个程序员,它对我提出了什么额外的要求吗?什么时候才能使用影子堆栈?我只是做游戏项目使用c++的乐趣,而不是设计驱动程序或任何严重的后果(目前)。

我读取关于影子堆栈的英特尔文章并收集它,复制堆栈并进行一些验证。这就是它的作用吗?如果是的话,它是如何做到的?我希望有一个解释或链接到更多的有关这一主题的来源。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-30 00:59:38

我如何知道我的程序是否与(/CETCOMPAT)兼容?

要么在有CET的系统上运行它,要么在标志上运行,并确保它不会崩溃。

阴影堆栈只会影响性能吗?

因为它是在硬件中实现的,它甚至不应该影响性能。如果您的程序正确地支持它,它将永远不会被注意到,除非它成功地防止了攻击。

作为一个程序员,它对我提出了什么额外的要求吗?

除非您正在手工编写程序集,并且在其中执行一些奇怪的操作,比如有一个与call配对的pop,或者一个与ret配对的push。(关于这样一个奇怪的程序集的例子,请看一下是否可以暂时取消Intel CET的单个ret指令,或者以其他方式与其一起使用retpolines?。)

什么时候才能使用影子堆栈?

当您的编译器和平台支持它时,应该使用它。这是一种安全的增加,基本上没有坏处。

它复制堆栈并进行一些验证。这就是它的作用吗?如果是的话,它是如何做到的?

它保存了只受callret和新的专门的影子堆栈指令(如incsspqwrssq )影响的堆栈的第二个副本。当执行ret时,如果实际堆栈上的地址与影子堆栈上的地址不匹配,那么您的程序就会在被黑客攻击的假设下被杀死。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70884589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档