summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIru Cai <mytbk920423@gmail.com>2019-05-30 15:15:49 +0800
committerIru Cai <mytbk920423@gmail.com>2019-05-30 15:17:41 +0800
commita02ff84a3b835f516e4e646b03773a49d5c3685b (patch)
tree12169b891fb9cb84fdee649da122e9ce0801e527
parent0e3832910186595fcb9b5f4857a61e491788018a (diff)
downloaddissertation-a02ff84a3b835f516e4e646b03773a49d5c3685b.tar.xz
cosmetic change
-rw-r--r--chap/chap2.tex13
1 files 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 预测返回地址错误有四种原因。