1
Fork 0
mirror of https://github.com/Steffo99/unisteffo.git synced 2024-11-24 17:04:20 +00:00
triennale-appunti-steffo/public/materials/year1/architettura/10_meltdown.md

703 B

Meltdown

Esempio circa comprensibile:

int meltdown() {
    bool array[2] = {false, true};

    if( qualcosa_che_restituisce_false() ) {
        //Questo viene predetto
        //Durante le predizioni non ci sono segfault!
        int protetto = *(indirizzo_bersaglio);
        //Se il primo bit di protetto è 1, verrà caricato "true" in cache, altrimenti, verrà caricato "false", ANCHE SE E' SOLO UNA PREDIZIONE!
        //Dopo essere stato caricato, NON VIENE RIMOSSO, anche se la predizione è sbagliata.
        int caricato = array[protetto & 1];
    }

    if( in_cache(true) ) cout << "Il primo bit del bersaglio è 1.\n";
    else cout << "Il primo bit del bersaglio è 0.\n";
}