From a02ff84a3b835f516e4e646b03773a49d5c3685b Mon Sep 17 00:00:00 2001 From: Iru Cai Date: Thu, 30 May 2019 15:15:49 +0800 Subject: cosmetic change --- chap/chap2.tex | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/chap/chap2.tex b/chap/chap2.tex index 0d7fefe..e72c42f 100644 --- a/chap/chap2.tex +++ b/chap/chap2.tex @@ -110,7 +110,7 @@ Intel 处理器,也可能可用于其他厂商的处理器。 理地址,处理器可以读取内核地址空间的数据,在产生异常前,攻击者构造的暂 态指令序列可以将读取到的数据通过隐蔽信道发送给攻击者。 -\begin{figure} +\begin{figure}[htbp] \centering \begin{minted}{nasm} xor rax, rax @@ -124,7 +124,7 @@ mov rbx, qword [rbx + rax] ; 访问探测数组 \label{lst:meltdown} \end{figure} -图\ref{lst:meltdown}是一段 Meltdown 攻击的示例代码,通过它可以读取内核地址空间的数据。 +图 \ref{lst:meltdown} 是一段 Meltdown 攻击的示例代码,通过它可以读取内核地址空间的数据。 这段 x86 指令读取了以 rcx 为地址的内核空间的数据,在用户态下,这个读取 内核空间数据的指令会产生异常,但是在处理器产生异常之前,这条指令可以将 内核空间的数据读至寄存器,并且其后的指令也会执行,访问 rbx 指向的探测 @@ -330,9 +330,8 @@ switching)。核心思想是 FPU 寄存器状态仅在必要时进行上下文 当前进程是否为 FPU 所有者,如果是,则 FPU 寄存器状态属于该进程,操作系 统启用 FPU,该进程再次可以自由执行 FPU 指令。否则,则操作系统在启用 FPU 的同时,将当前 FPU 寄存器状态存储到 FPU 所有者进程的状态保存区域, -并恢复当前进程的 FPU 寄存器状态,并将该进程设为 FPU 的所有者。这个算法 -在不同操作系统中的实现可能不同,它们的共同点是,使用 FPU 的进程切换到 -不使用 FPU 的进程时,操作系统不需要上下文切换 FPU 寄存器的状态。 +并恢复当前进程的 FPU 寄存器状态,并将该进程设为 FPU 的所有者。 +在不同的操作系统中,这个算法的实现可能不同,它们的共同点是,如果切换到处理器的进程不使用 FPU,操作系统不需要保存和恢复 FPU 寄存器的状态。 虽然延迟 FPU 上下文切换仍然在现代的操作系统中广泛使用,但其基本假设通 常不再适用。从 Intel MMX 指令集扩展,到后续的 SSE,AVX 和 AVX-512,FPU @@ -344,7 +343,7 @@ FPU 的同时,将当前 FPU 寄存器状态存储到 FPU 所有者进程的状 行切换,在正常操作中不会生成 \Fault{NM} 异常。 在使用 Intel 的硬件辅助虚拟化技术时,处理器在从客户机切换到管理程序时, -不会切换FPU寄存器状态。虚拟机管理程序负责上下文切换 FPU 寄存器的状态, +不会切换 FPU 寄存器状态。虚拟机管理程序负责上下文切换 FPU 寄存器的状态, 并且机制与非虚拟化操作系统的机制相同。因此,延迟 FPU 上下文切换也适用于 虚拟机管理程序。 @@ -581,7 +580,7 @@ Intel 处理器的 BTB.\supercite{jump-over-aslr} \subsubsection{Spectre-RSB} -返回栈(RSB)用于预测程序函数调用的返回地址。RSB 是一个栈结构,当函数调用指令执行时,处理器将返回地址压入 RSB,用于该函数调用对应的返回指令执行时,预测返回的目标地址。当函数返回时,处理器从 RSB 的栈顶得到一个地址,作为预测的返回地址,处理器从这个地址开始推测式执行。当处理器从体系结构的软件栈中得到返回地址,该地址和预测的返回地址相同时,推测式执行正确,否则推测式执行错误。 +返回栈(RSB)用于预测程序函数调用的返回地址。RSB 是一个栈结构,保存处理器中每个执行的函数调用指令的返回地址,从而该函数调用对应的返回指令执行时,可以预测从 RSB 的栈顶取得的地址,为返回指令的目标地址,处理器将从这个地址开始推测式执行。当处理器从体系结构的软件栈中得到返回地址,该地址和预测的返回地址相同时,推测式执行正确,否则推测式执行错误。 Spectre-RSB\supercite{spectre-returns}\supercite{ret2spec} 利用了 RSB 预测返回地址错误,导致错误的推测式执行。RSB 预测返回地址错误有四种原因。 -- cgit v1.2.3