what exercise has results[]
Non è un'arte esatta. La cache può essere colpita per un indice che non è quello colpito da victim_function. La soglia potrebbe portare a risultati borderline.
Quindi il codice esegue l'attacco 999 volte e incrementa i risultati [mix_i] quando pensa che ci sia un hit nella cache. Quindi seleziona il risultato con il valore del risultato più alto (la maggior parte dei colpi di cache attesi) e assume che sia il valore corretto per il byte della vittima.
why mix_i hits the cache when it represents the byte at the address of the cache hit?
mix_i è solo un modo per mischiare i.
for (i = 0; i < 256; i++) {
mix_i = ((i * 167) + 13) & 255;
...
}
I risultati sopra riportati in mix_i vengono inizializzati come ogni valore compreso tra 0-255 una volta sola ma non nell'ordine 0,1,2,3 (come lo sono io). Questo è fatto per il motivo indicato nei commenti - a impedisce la previsione del passo ;