Como medir o número de instruções montadas executadas?

Eu quero de alguma forma obter o "número de instruções assembler executadas" de um binário. Considere o seguinte trecho de código:

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

Então, se eu iniciasse o programa com, e. "abc" não levaria o primeiro ramo, assim executaria menos instruções. Se eu colocar no "pbc" ele levaria o primeiro branch, assim ele executaria um pouco mais (cerca de 4-5) instruções. (Esta é uma pesquisa para arquivos CTF (Capture The Flag)). Então, minha ideia é, em vez de reverter um binário e tentar entender o algoritmo, usar a abordagem mais rápida para contar o número de instruções assembler executadas para configurações diferentes (como diferentes caracteres ou comprimentos de senha e assim por diante para ver se posso pegar outro branch usando outra entrada, criando assim mais instruções assembler).

Minha idéia básica seria escrever um depurador simples apenas colocando um int3 após a Instrução atual, incrementar um contador, desmontar a próxima instrução e colocar um int3 logo após esta instrução (versão simplificada da minha ideia).

Existe algum programa / biblioteca / ... que já fez essas coisas? (Porque eu vejo alguns problemas quando o programa lida com sinais, ...)

(Eu já tentei usar timers de alta precisão para medir o tempo, mas isso foi um fracasso completo, porque a diferença é de apenas 4-5 instruções)

questionAnswers(1)

yourAnswerToTheQuestion