From 29f78286a4a82782661c6e9f8ecc1d70939cbe56 Mon Sep 17 00:00:00 2001
From: Iru Cai <mytbk920423@gmail.com>
Date: Wed, 15 May 2019 13:34:15 +0800
Subject: upd

---
 chap/chap2.tex | 27 ++++++++++++++++++++-------
 1 file changed, 20 insertions(+), 7 deletions(-)

(limited to 'chap/chap2.tex')

diff --git a/chap/chap2.tex b/chap/chap2.tex
index 69d32d0..1dcfdf2 100644
--- a/chap/chap2.tex
+++ b/chap/chap2.tex
@@ -133,6 +133,8 @@ Meltdown 打破了处理器内存隔离功能提供的所有安全保障。这
 
 以下是一段 Meltdown 攻击的示例代码，通过它可以读取内核地址空间的数据：
 
+\begin{figure}
+  \centering
 \begin{minted}{nasm}
 xor rax, rax
 retry:
@@ -141,6 +143,9 @@ shl rax, 0xc
 jz retry
 mov rbx, qword [rbx + rax] ; 访问探测数组
 \end{minted}
+\caption{Meltdown 示例代码}
+\label{lst:meltdown}
+\end{figure}
 
 以上 X86 指令读取了以 rcx 为地址的内核空间的数据，在用户态下，这个读取
 内核空间数据的指令会产生异常，但是在处理器产生异常之前，这条指令可以将
@@ -204,8 +209,7 @@ Foreshadow 对 Intel SGX 所追求的安全模型产生了深远的影响，在
 \begin{figure}[htbp]
   \centering
   \includegraphics[width=0.8\textwidth]{addr-trans.eps}
-  \caption{CPU 的地址翻译过程和 L1 终端错误的原理：图片的下半部分为文
-    档描述的地址翻译过程，上半部分是微架构的行为。\supercite{foreshadowNG}}
+  \caption{地址翻译过程和 L1 终端错误的原理\supercite{foreshadowNG}}
   \label{fig:addr-tran}
 \end{figure}
 
@@ -292,8 +296,7 @@ Foreshadow 攻击使用在可以直接控制客户机器物理地址和一级缓
 \begin{figure}[htbp]
   \centering
   \includegraphics[width=0.8\textwidth]{foreshadow-vmm.eps}
-  \caption{Foreshadow VMM 的一种使用场景。同一物理核上的虚拟机共享一级
-    缓存，攻击者可以操作其内存访问，读取受害者虚拟机在一级缓存的内容。\supercite{foreshadowNG}}
+  \caption{Foreshadow VMM 的一种使用场景\supercite{foreshadowNG}}
   \label{fig:foreshadow-vmm}
 \end{figure}
 
@@ -363,12 +366,17 @@ switching）。核心思想是 FPU 寄存器状态仅在必要时进行上下文
 攻击者获取同一处理器硬件线程中 FPU 寄存器的数据。以下简单的例子可以泄
 露1比特的数据。
 
+\begin{figure}
+  \centering
 \begin{minted}{nasm}
 movq rax, xmm0
 and rax, 1
 shl rax, 6
 mov rax, dword [mem + rax]
 \end{minted}
+\caption{LazyFP 示例代码}
+\label{lst:lazyfp}
+\end{figure}
 
 在以上代码片段中，由于进程中 FPU 寄存器被禁用，movq 指令产
 生 \Fault{NM} 异常。操作系统会用对应用程序透明的方式处理该异常，恢复进
@@ -469,6 +477,7 @@ Spectre v1 是最早提出的 Spectre 攻击，属于 Spectre-PHT 类型。它
 害者程序中的分支，一个例子如下：
 
 \begin{figure}[htbp]
+\centering
 \begin{minted}[frame=single,linenos=true]{C}
 if (x < array1_size)
     y = array2[array1[x] * 4096];
@@ -492,9 +501,7 @@ if (x < array1_size)
 \begin{figure}[htbp]
   \centering
   \includegraphics[width=0.8\textwidth]{spectre_v1.eps}
-  \caption{在得出边界检查的正确结果之前，分支预测器使程序从最可能的分
-    支目标继续运行，如果预测结果正确，则可以得到性能提升。但是，如果边
-    界检查预测错误，攻击者在一些情形可以泄露秘密数据。\supercite{spectre}}
+  \caption{边界检查结果和分支预测方向的可能情形\supercite{spectre}}
   \label{fig:spectre_v1}
 \end{figure}
 
@@ -609,10 +616,15 @@ ARM 处理器上进行验证，确认它们受 Spectre v1 的影响。
 以将缓冲区中的数据转发给需要的指令。推测式缓冲区溢出利用了这个特性，例
 如以下程序：
 
+\begin{figure}
+  \centering
+  \caption{推测式缓冲区溢出}
+  \label{lst:spec-buf-overflow}
 \begin{minted}{C}
 if (x < len)
     a[x] = z;
 \end{minted}
+\end{figure}  
 
 攻击者给出一个超过数组 \verb|a| 大小的 \verb|x| 时，在推测式执行时，会
 将 \verb|a[x]| 的地址和攻击者输入的值 \verb|z| 写入至存储缓冲区。如果
@@ -769,6 +781,7 @@ NetSpectre不会跨越进程边界，而是通过将有效和无效值交替地
 包的程序的一部分，其中 x 由攻击者控制，它构成了 NetSpectre 的泄露组件。
 
 \begin{figure}[htbp]
+  \centering
 \begin{minted}{C}
 if (x < bitstream_length)
   if (bitstream[x])
-- 
cgit v1.2.3

