Как измерить количество выполненных инструкций ассемблера?

Я хочу как-то получить «количество выполненных инструкций ассемблера» из двоичного файла. Рассмотрим следующий фрагмент кода:

if(password[0] == 'p') {
 if(password[1] == 'a') {
   ......
     printf("Correct Password\n");
 }
}

Тогда, если бы я начал программу с, например, «abc» не будет занимать первую ветвь, поэтому будет выполнять меньше инструкций. Если бы я вставил «pbc», это заняло бы первую ветвь, таким образом, это выполнило бы немного больше (приблизительно 4-5) инструкций. (Это некоторые исследования для файлов CTF (Capture The Flag)). Таким образом, моя идея состоит в том, чтобы вместо обращения двоичного файла и попытки понять алгоритм, я использую более быстрый подход в подсчете количества выполненных инструкций ассемблера для различных установок (таких как разные символы или длины пароля и т. Д., Чтобы увидеть, могу ли я взять другую ветку используя другой вход, таким образом создавая больше инструкций ассемблера).

Моя основная идея состоит в том, чтобы написать простой отладчик, просто поместив int3 после текущей инструкции, увеличить счетчик, дизассемблировать следующую инструкцию и поместить int3 сразу после этой инструкции (сильно упрощенная версия моей идеи).

Есть ли какая-нибудь программа / библиотека / ... которая уже сделала это? (Потому что я вижу некоторые проблемы, когда программа работает с сигналами, ...)

(Я уже пытался использовать таймеры высокой точности для измерения времени, но это было полным провалом, потому что разница составляет всего 4-5 инструкций)

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

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