在《Spectre 论文》中,有一个利用越界数组访问的例子(第1.2节)。代码如下:
该过程是使用一些有效的
现在,问题来了。在推测执行中,必须获取
有人能解释一下吗?这里有什么误解?
if (x < array1_size)
y = array2[ array1[x] * 256 ];
该过程是使用一些有效的
x
值来训练正确的路径。然后提供一个无效的x
值,并同时假定array1_size
未缓存。由于分支预测器认为条件为真,它将推测地获取array2的偏移量。现在,问题来了。在推测执行中,必须获取
array1[x]
,其中x是恶意的并且越界。因此,array1[x]
实际上是无效的!那么攻击是什么?没有获取到有效数据!有人能解释一下吗?这里有什么误解?
array1[10]
是无效的,应该在发生附加之前抛出异常。不是这样吗? - mahmoodif(arr [x]!= NULL)* arr [x] = 3;
这样的代码,当x
为NULL
时,* arr [x] = 3
可以被投机性地运行,会触发一个异常,该用户不应该获得,因为分支条件最终将评估为* false *,并且投机运行的代码未被弃用。 - Déjà vu