État des registres
Un des principaux atouts d’un débogueur est de pouvoir visualiser le contenu des registres. Quand une exception apparaît, nous devons être capables de déterminer l’état de la pile à n’importe quel endroit et à n’importe quel moment.
Pour ce faire, nous devons donc obtenir les informations du thread courant.
La fonction OpenThread() va nous y aider en lui indiquant les paramètres adéquats. Cette fonction est très semblable à OpenProcess() mais au lieu de lui transmettre le PID, nous devrons lui transmettre le TID (Thread Identifier).
1. Énumération des threads
Nous devons donc être capables d’énumérer tous les threads du processus. Nous avons pour cela à notre disposition la fonction CreateToolhelp32Snapshot() de la DLL kernel32.dll. Nous pourrons donc obtenir par exemple la liste des processus, des threads et les DLL chargés.
Le paramètre dwFlags indiquera à la fonction ce que nous désirons regarder (threads, DLL, processus, heap).
Nous mettrons donc ce paramètre à TH32CS_SNAPTHREAD (valeur 0x00000004) pour voir les threads.
L’autre paramètre, th32ProcessID, est simplement le PID du processus.
Quand la fonction réussit, elle nous retourne le handle de l’objet snapshot.
Une fois que nous avons la liste des threads, nous pouvons les énumérer.
Pour commencer l’énumération, nous utiliserons...