Meltdown PoC详细代码审查

Ant*_*REL 6 c security assembly exploit nasm

我读了关于Meltdown和Spectre的所有周末

我也已经阅读了针对SpectreMeltdown的.pdfs,对于 那些寻求更多关于这些漏洞的知识的人来说,这是必读的,但遗憾的是没有提供有关代码的详细解释.

我在github上发现了各种PoC,这非常有趣,但我缺乏完全理解它的知识.关于特定部分的更多解释,我将感激不尽:

从这个链接https://github.com/dendisuhubdy/meltdown/blob/master/src/poc.c ,以及其他git存储库,这个漏洞的概念中有许多有趣的部分.


时间读

/* Time reads. Order is lightly mixed up to prevent stride prediction */
    for (i = 0; i < 256; i++) {
        mix_i = ((i * 167) + 13) & 255;
        addr = &array2[mix_i * 512];
        time1 = __rdtscp(&junk); /* READ TIMER */
        junk = *addr; /* MEMORY ACCESS TO TIME */
        time2 = __rdtscp(&junk) - time1; /* READ TIMER & COMPUTE ELAPSED TIME */
        if (time2 <= CACHE_HIT_THRESHOLD && mix_i != array1[tries % array1_size])
            results[mix_i]++; /* cache hit - add +1 to score for this value */
    }
Run Code Online (Sandbox Code Playgroud)

为什么我们使用素数167和13?

 /* Locate highest & second-highest results results tallies in j/k */
Run Code Online (Sandbox Code Playgroud)

为什么我们关心获得最大值?


其他部分解释也非常受欢迎!!