Earlier quoted context omitted.
It's a timing attack against the cache. The speculative execution might need to do a read, which means something would need to be evicted from the cache. This makes a subsequent read against that evicted adres slower. This way you can detect things based on speculative execution. I don't know how they go from that to reading memory though.
> I don't know how they go from that to reading memory though. That was the second bit of the example source code: unsigned long index2 = ((value&1)*0x100)+0x200; This creates one of two different addresses, depending upon the value of bit zero of the memory location being attacked. The two different addresses are farther apart than the size of a cache line. > unsigned char value2 = arr2->data[index2]; This actually…
I was thinking of something similar but with a branching operation, but that would get screwed by branch prediction.