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

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

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

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

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

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

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

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

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