学習プロジェクトの一環として、Spectre と Meltdown の PoC に少し取り組み、コンセプトに慣れるために取り組みました。クロックタイマーを使用して以前にアクセスしたデータを回復することができましたが、その時点から物理メモリを実際にどのように読み取るのか疑問に思っています。
これは私の質問につながります: Spectre v1\v2 の多くの例では、このおもちゃコードの例を読むことができます:
if (x<y) {
z = array[x];
}
x はおそらく : attacked_address - address_of_array に等しいため、z が attacked_address で値を取得することになります。
この例では非常に簡単に理解できますが、実際には、attacked_address がどのように見えるかをどうやって知るのでしょうか? それはオフセット付きの仮想アドレスですか、それとも物理アドレスですか?そもそも「重要なメモリ」がどこにあるかをどのように見つけることができますか?