Como posso descobrir qual linha de cache é tocada por uma instrução em um processador Intel?

Eu li o artigosobre a exploração Meltdown / Spectre que permitem a leitura de dados privilegiados do kernel usando bugs de hardware na CPU. Diz:

O truque é alinhar as instruções em um processo normal do usuário que faz com que o processador obtenha especulativamente dados da memória protegida do kernel antes de executar qualquer verificação de segurança. O crucial código x86-64 que explora o Meltdown pode ser tão simples quanto ...

; rcx = kernel address
; rbx = probe array
retry:
  mov al, byte [rcx]
  shl rax, 0xc
  jz retry
  mov rbx, qword [rbx + rax]

Tentar buscar um byte do endereço do kernel como um processo do usuário aciona uma exceção - mas as instruções subseqüentes já foram especulativamente executadas fora de ordem e tocam em uma linha de cache com base no conteúdo desse byte buscado.

Uma exceção é gerada e tratada não fatalmente em outros lugares, enquanto as instruções fora de ordem já atuaram no conteúdo do byte. Fazer alguma mágica de Flush + Reload no cache revela qual linha de cache foi tocada e, portanto, o conteúdo do byte de memória do kernel. Repita isso várias vezes e, eventualmente, você despeja o conteúdo da memória do kernel.

Alguém pode explicar como é issoFlush + Recarregar magia está feito e como pode revelar a linha de cache tocada?

questionAnswers(1)

yourAnswerToTheQuestion