Le module ctypes de Python
Le module ctypes permet d’interagir avec des librairies écrites en langage C.
Nous utiliserons dans la suite le module ctypes pour notre debugger.
Le module ctypes fournit des méthodes pour charger des librairies écrites en C et appeler les fonctions de ces librairies, des types de données compatibles avec le langage C pour passer et récupérer des variables avec ces fonctions.
Le module ctypes est disponible à partir de Python 2.5 et supérieur.
Le module ctypes exporte un objet cdll qui permet de charger une librairie. Dans l’environnement Windows, nous disposons en plus des objets windll et oledll.
L’objet cdll fournit une méthode LoadLibrary() qui permet de charger une librairie dynamique.
From ctypes import *
cdll.LoadLibrary("libc6.so.6") # Linux
print windll.kernel32 # windows
print cdll.msvcrt # windows
libc=cdll.msvcrt
Une fois que nous avons chargé une librairie via la méthode LoadLibrary(), nous l’affectons à un objet qui va permettre d’appeler les fonctions définies par la librairie.
Cet objet agit en wrapper en permettant d’accéder aux fonctions de la librairie en passant par des pointeurs.
print windll.kernel32.GetModuleHandleA # Affiche <_FuncPtr object
at 0x...>
print hex(windll.kernel32.GetModuleHandleA(None)) # appel de la
fonction GetModule HandleA de la windll
Le module ctypes fournit des types de données compatibles avec le langage...