При атаке призрака paper на стр. 17 в строке 49 присутствует следующее утверждение:
_mm_clflush(&array1_size);
Позже вызывается функция жертвы:
void victim_function(size_t x) {
if (x < array1_size) {
temp &= array2[array1[x] * 512];
}
}
Из статьи я понимаю, что из-за оператора flush процессор будет пытаться спекулировать и выполнять оператор temp &= array2[array1[x] * 512];
(на основе обучения), в то время как он оценивает результат условия if.
Myвопрос заключается в том, что если я прокомментирую оператор _mm_clflush(&array1_size)
и удостоверимся, что array1_size
находится в кеше, ЦП все еще будет спекулировать и выполнять temp &= array2[array1[x] * 512];
, или ЦП определит, что переменная array1_size
находится в кеше, иоценит условие if и только на основании его результата решит, что делать дальше.