- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
最famous stackoverflow questions之一这就是为什么对已排序的数组进行排序如此之快的原因;答案是因为分支预测。
Intel 和 Microsoft 幽灵修复程序的应用是否会有效地抵消此问题中对受影响处理器(老一代 Intel 处理器、AMD Ryzen 和 ARM)给出的答案?
最佳答案
不,Spectre 的关键是强制错误预测间接 分支,因为它们可以跳转到任何地址。找到加载所需 secret 数据的指令序列,然后使用 secret 作为数组索引进行另一个数据相关加载,这并非易事。
要攻击常规的采用/不采用条件分支(就像您在排序函数中找到的,或者在排序或未排序数组的循环中的条件分支),您需要找到一个案例执行分支的“错误”一侧(可能是源代码中 if/else 的错误一侧)在使用寄存器中的“错误”值运行时会做一些有用的事情。这似乎有道理1,但不太可能,因此大多数针对 Spectre 的防御只会担心间接分支。
Spectre 的硬件修复必须比“关闭分支预测”(即在每个条件分支处停止管道)更微妙。这可能会使性能降低一个数量级很多代码,并且对于防止本地信息泄露(这可能导致特权升级)来说,它的防御级别太高了。
即使只关闭间接分支的预测(但不是常规条件分支)对于大多数用户空间代码来说可能代价太高,因为每个共享库/DLL 函数调用通过主流操作系统(Linux、OS X、Windows)上正常软件生态系统中的间接分支。
Linux 内核正在试验 a retpoline击败内核中间接分支的间接分支预测。不过,我不确定它是否默认启用,即使在启用 Meltdown 解决方法 (KPTI) 的内核中也是如此。
脚注:
switch
的错误 case
可能会做一些完全不合适的事情(例如在解释器中),如果 switch
是用嵌套分支而不是单个间接分支,那么您就可以攻击它。 (编译器经常使用 switch
的分支目标表,但是当 case 稀疏时,它并不总是可行的。例如 case 10
/case 100
/case 1000
/default
需要一个只有 3 个使用值的 990 条目数组。)关于performance - Spectre 修复对排序性能的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48215071/
Spectre.Console大家可能都不陌生,写控制台程序美化还是不错的,支持着色,表格,图标等相当nice,如果对这个库不熟悉我强烈推荐你了解一下,对于写一些CLI小工具还是相当方便的, 本文主要
最famous stackoverflow questions之一这就是为什么对已排序的数组进行排序如此之快的原因;答案是因为分支预测。 Intel 和 Microsoft 幽灵修复程序的应用是否会有
在 Spectre 中paper ,有一个利用越界数组访问的示例(第 1.2 节)。代码是 if (x < array1_size) y = array2[ array1[x] * 256 ];
我已经阅读了一些关于 Spectre v2 的书,显然你得到了非技术性的解释。 Peter Cordes 有更深入的explanation但它并没有完全解决一些细节。注意:我从未执行过 Spectre
我正在开发(NASM + GCC 针对 ELF64)PoC它使用一个幽灵小工具来测量访问一组缓存行的时间( FLUSH+RELOAD )。 如何制作可靠的幽灵小工具? 我相信我理解 FLUSH+REL
描述 paper 的 Spectre 漏洞,我们可以看到它谈到了这个特定的漏洞 if (x < array1_size) y = array2[array1[x] * 256]; 根据该论文,在
我正在努力在 cljs 中使用幽灵(0.12.0)。我可能没有正确设置 ns。 运行一个简单的示例,我收到以下错误消息: => (select [:a :b] {:a {:b 42}}) #objec
最近发现的硬件漏洞 Meltdown 和 Spectre 之间的主要区别是什么?我知道它们都依赖于投机执行,但它们之间有何不同? 最佳答案 What are the key differences b
我了解paper的部分他们欺骗 CPU 推测性地将受害内存的一部分加载到 CPU 缓存中。我不明白的部分是他们如何从缓存中检索它。 最佳答案 他们不直接检索它(越界读取的字节不会被 CPU“退休”,并
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 5 年前。 Improve t
我正在使用 Spectre CSS列表中的下拉菜单并放置 badges使用 vue.js 在它们上动态使用数据绑定(bind)。我通过将 div.dropdown 包装在一个有条件地具有 badge
我正在阅读 the book by Ayende 中的示例章节在the Boo language的网站上我看到了对 Specter BDD Framework 的引用. 我想知道是否有人在他们的项目中
完整的 Clojure 新手在这里。这是一个简单的问题,但我似乎无法理解: 鉴于我有一个未知深度的嵌套 hasmap,我如何使用 Spectre 的 transform() 来改变数据结构的值?我想这
幽灵中有没有一种简单的方法来收集满足谓词的所有结构? (./pull '[com.rpl/specter "1.0.0"]) (use 'com.rpl.specter) (def data {:it
假设我有一个像这样的 Clojure 映射: (def mymap {:a [1 2 3] :b {:c [] :d [1 2 3]}}) 我想要一个函数remove-empties,它会生成一个新映
我是编码新手,并尝试使用 Spectre.css 构建一个小型响应式网站. 我要 3 cards连续,如果视口(viewport)太小,它们应该放在下一行。目前它们只是缩小但不会进入下一行。 Spec
对于这个问题,我将使用 Spectre CSS framework . 我目前有以下模式代码,但计划在页面中有多个:
我已经有几年没有编程了,但是由于对 Meltdown 和 Spectre 的大惊小怪,我安装了 VS2017 并从这个 pdf 编译了 Spectre 示例:https://spectreattack
MSVC 刚刚发布了一个更新,其中添加了关于编译器将注入(inject)以减轻(显然是一小部分)Spectre 的某些代码的新警告: https://blogs.msdn.microsoft.com/
有谁知道为什么建议 LFENCE 指令在 Spectre #1(边界检查绕过/越界读取)的情况下停止推测执行,但在 Spectre #2(分支目标注入(inject))的情况下没用?这两个 Spect
我是一名优秀的程序员,十分优秀!