Les points d’arrêt (breakpoints)
1. Points d’arrêt logiciel
Pour placer des points d’arrêt, nous devons être capables d’écrire et de lire dans la mémoire.
La fonction ReadProcessMemory() va nous y aider ainsi que WriteProcessMemory().
Grâce à ces deux fonctions, nous allons pouvoir inspecter la mémoire.
Les paramètres à leur fournir sont lpBaseAddress (adresse où nous voulons commencer à lire ou écrire), lpBuffer (pointeur vers la donnée que nous voulons lire ou écrire), nSize (nombre total d’octets que nous voulons lire ou écrire).
En utilisant ces deux fonctions, nous pourrons utiliser aisément dans notre debugger les points d’arrêt.
Généralement, les points d’arrêt sont placés sur un appel de fonction. Pour l’exercice, nous utiliserons l’appel à printf().
Pour déterminer l’adresse virtuelle d’une fonction, nous utiliserons GetProcessAddress() qui sera exporté de kernel32.dll.
Nous aurons besoin de l’en-tête de la fonction sur l’appel de laquelle nous désirons placer le point d’arrêt, GetModuleHandle() nous y aidera.
Vous pouvez aller voir les définitions de read_process_memory(), write_process_memory(), bp_set() et func_resolve() dans mon_debugger_final.py si vous souhaitez plus de détails là-dessus.
Pour nous permettre de tester le script qui va boucler sur un printf...