J'utilise Pin
pour l'analyse dynamique. Dans ma tâche d'analyse dynamique sur le code binaire 64 bits x86, je souhaite reprendre l'exécution à des positions de programme arbitraires (par exemple, la deuxième instruction de la fonction exécutée en cours) après avoir corrigé certaines erreurs d'accès à la mémoire. rappels.Reprendre l'exécution à des positions arbitraires dans une fonction de rappel
Ce serait quelque chose comme ceci:
BOOL catchSignalSEGV(THREADID tid, INT32 sig, CONTEXT *ctx, BOOL hasHandler, const EXCEPTION_INFO *pExceptInfo, VOID *v)
{
// I will first fix the memory access error according to certain rules.
fix();
// then I would like to resume the execution at an arbitrary position, say, at the beginning of current monitored function
set_reg(rip, 0x123456); // set the rip register
PIN_ExecuteAt(ctx); // resume the execution
return false;
}
Cependant, je suis arrivé cette exception: E: PIN_ExecuteAt() ne peut pas être appelé à partir d'un rappel.
Je sais que je peux reprendre l'exécution à « instruction en cours » par fausse déclaration à la fin de la fonction de traitement du signal, mais fondamentalement je peux reprendre à arbitraires positions?
Suis-je clair? Merci de votre aide!
Merci beaucoup pour votre aide, je l'ai fait selon vos conseils. Cependant, je suis toujours confus avec «si-alors l'instrumentation pour améliorer la performance» ... pourriez-vous élaborer plus? merci – computereasy
Je parlais de cela car avoir une routine d'analyse pour chaque instruction qui pourrait causer un signal peut avoir un impact important sur les performances. Expliquer si l'instrumentation prend alors plus d'espace que ne le permet la section des commentaires. Je recommande d'aller sur le site Web de Pin et en regardant la section tutoriels, tous les récents discutent de l'instrumentation si-alors en profondeur. – nitzanms