События, вероятно, идентичны Скайлэйку, так что, вероятно, в нескольких шагах от работы. @Том

читал интересную статью под названием «Атака по боковому каналу с высоким разрешением на кэш последнего уровня» и хотел найти функцию хеширования индекса для моей собственной машины, то есть Intel Core i7-7500U (архитектура Kaby Lake) - следуя указаниям из этой работы.

Для обратного инжиниринга хеш-функции в документе упоминается первый шаг:

 for (n=16; ; n++) 
 {
   // ignore any miss on first run
   for (fill=0; !fill; fill++) 
   {
     // set pmc to count LLC miss
     reset_pmc();
     for (a=0; a<n; a++)
       // set_count*line_size=2^19
       load(a*2^19);
   }

   // get the LLC miss count
   if (read_pmc()>0) 
   {
     min = n;
     break;
   }
 }

Как я могу кодироватьreset_pmc() а такжеread_pmc() в С ++? Из всего, что я читал онлайн, я думаю, что для этого требуется встроенный код ассемблера, но я понятия не имею, какие инструкции использовать, чтобы получить количество пропусков LLC. Я был бы признателен, если кто-то может указать код для этих двух шагов.

Я использую Ubuntu 16.04.1 (64-разрядная версия) на рабочей станции VMware.

П.С .: Я нашел упоминание об этихLONGEST_LAT_CACHE.REFERENCES а такжеLONGEST_LAT_CACHE.MISSES в главе 18 том 3ВРуководство разработчика программного обеспечения Intel Architectures, но я не знаю, как их использовать.

Ответы на вопрос(0)

Ваш ответ на вопрос