gpt4 book ai didi

security - 分支预测器 "train"是什么意思?

转载 作者:行者123 更新时间:2023-12-04 16:11:58 26 4
gpt4 key购买 nike

我正在阅读 this article关于类似于 Spectre 的理论上的 CPU 漏洞,它指出:

"The attacker needs to train the branch predictor such that it reliably mispredicts the branch."

我大致了解什么是分支预测及其工作原理,但是“训练”分支预测器意味着什么?这是否意味着偏向一个分支,使其比另一个分支的计算成本更高,或者是否意味着(在循环中)在继续下一个预测错误的分支之前,不断让 CPU 正确预测特定分支?

例如,

// Train branch predictor
for (int i = 0; i < 512; i++)
{
if (true){
// Do some instructions
} else {
// Do some other instruction
}
}

// The branch predictor is now "trained"/biased to predict the first branch?

// Proceed to attack

分支预测器是否使用权重来偏向预测或基于先前的预测/错误预测的一种或另一种方式?

最佳答案

这意味着创建一个分支,为您正在攻击的分支设置别名(通过将其放在特定地址,可能与另一个进程中的虚拟地址相同,或者 4k 或其他 2 的幂偏移可能有效),并多次运行它以使预测器产生偏差。

因此,当您使用 Spectre 攻击的分支实际运行时,它会按照您想要的方式进行预测。 (或者对于间接分支,会跳转到你想要的虚拟地址)。


现代 TAGE 分支预测器索引基于分支历史(动态指令流中导致该分支的其他分支),因此适当的训练可能很复杂......

但在最简单的层面上,是的,具有超过 1 位状态的分支预测器记住的不仅仅是最后一个分支方向。 <强> Wikipedia has a big article关于分支预测的许多不同实现,从简单的 2 级饱和计数器开始。

训练它们包括让您控制的分支重复以相同的方式运行。


具体来说,您可以将类似这样的 asm 放入循环中(在已知地址处),然后重复运行它。

xor   eax,eax    ; eax=0 and thus set ZF
jnz .target ; always not-taken

然后目标分支将失败并运行您想要的幽灵“小工具”,即使它通常被占用也是如此。

关于security - 分支预测器 "train"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51746781/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com