https://spectreattack.com/
↑ここに論文があるから読むといいよ
要は meltdown も spectre も似たような脆弱性で
meltdown はアウトオブオーダー実行、spectre は投機的実行のときに権限チェックが行われないことを使う
meltdown の場合はこう:
raise exception;
byte = array[カーネル領域のアドレス]
cache = array2[4096*byte]
こうすると、例外が起きる前にカーネル領域の byte が読みだされて、それをインデクスにして cache が読みだされる
そのあと例外が発生して、byte と cache は放棄される (ここまでは正常な動き)
ところが cache は CPU からは見えないけどキャッシュメモリに残ったままなので
k = 0..256 について array2[k] を読みだすのにかかる時間を測定すると、k = byte の時だけ速く読める
これでカーネル領域にあったデータがわかる