Hacking de Dr Geo avec Dr Geo
Alain Busser, Hilaire Fernandes
Dr Geo, comme Scratch, est écrit en Smalltalk et tourne sur une machine virtuelle Squeak. Cette machine virtuelle ressemble à un système d'exploitation, avec un bureau sous la figure Dr Geo ; et, pour peu qu'on ait rendu la figure redimensionnable, on peut d'un simple clic sur le bureau, accéder à l'intégralité du code source de Pharo Smalltalk, Dr Geo y compris. Ce qui permet, depuis Dr Geo, de modifier non seulement Dr Geo, mais le « système d'exploitation » lui-même. Cette possibilité, quelque peu effrayante il faut l'avouer, va être abondamment utilisée pour faire du hacking, et donc montrer sur un exemple « comment ça marche ».
Dans cet article, on va voir ce qu'est un triangle pour Dr Geo, et ce qu'on peut faire avec.
Inspection
L'enquête qui se présentait devant l'inspecteur Dr Geo s'avérait difficile : enquêter sur un triangle, et surtout savoir qui il est, ce qu'il est, et évaluer l'étendue de ses pouvoirs... L'inspecteur Dr Geo était face à une figure sur laquelle on avait construit un triangle ABC colorié en magenta (en effet, l'inspecteur rentrait de vacances et c'était sur le triangle des bermudas qu'il devait enquêter) ; c'était lui, le suspect sur lequel devait enquêter l'inspecteur :
Pour démarrer l'interrogatoire, il utilisa d'emblée l'arme secrète qu'on lui avait enseignée en scriptologie : le redoutable script Smalltalk Dr Geo (visible sur la figure ci-dessus, il suffit de cliquer sur cette icône). Dans la fenêtre qui s'ouvrit alors, il écrivit :
puis sauvegarda le résultat pour que la collection de scripts de Dr Geo s'enrichisse de ce nouveau script, qui va juste inspecter l'objet sélectionné.
Pour inspecter un objet, il suffit alors de lancer ce script et de cliquer sur l'objet en question. Pour lancer le script, l'icône ressemble à celle de la création de scripts :
Le clic sur cette icône ouvre la fenêtre des scripts, parmi lesquels on trouve celui qu'on vient de créer :
Après avoir sélectionné ce script (en cliquant dessus), la fenêtre de l'inspecteur d'objets apparut alors, et l'inspecteur Dr Geo comprit alors que le triangle est un polygone défini par N sommets :
Il en profita pour se livrer à une fouille en règle de son suspect, en examinant la liste de toutes ses variables d'instances, parmi lesquelles les fameux sommets, qui sont des points rangés dans une Collection :
Puis l'inspecteur se rendit au fichier des archives, pour enquêter sur les DrGeoIIPolygonNptsItem en général.
Interrogatoire
Il lui suffit de réduire la figure Dr Geo, en la rendant redimensionnable (clic en haut à droite), puis de cliquer sur le bureau pour voir apparaître le menu contextuel suivant :
Compte tenu du fait que le DrGeoIIPolygonNptsItem était vraisemblablement un objet de DrGeoII-Core-Item, il tomba presque immédiatement sur le fichier qu'il cherchait :
Ce qui lui apprit que le suspect était capable de calculer sa propre longueur, puisque c'est ce qu'il faisait à chacune de ses mises à jour (quand on bouge un point à la souris) ; ce qui est logique, puisque lorsqu'une mise à jour est requise, la longueur a vraisemblablement changé et doit être recalculée. Mais à ce stade, l'inspecteur Dr Geo était coincé : parmi les méthodes de son suspect, il n'y en avait aucune appelée computeLength. Comment le suspect pouvait-il calculer lui-même sa longueur si on ne le lui avait jamais appris à le faire ?
Bon sang mais c'est bien sûr ! L'héritage ! C'est tout simplement que le suspect avait hérité cette capacité de ses parents ; l'inspecteur Dr Geo se livra alors à des recherches généalogiques sur son suspect, en cliquant sur le bouton Hierarchy, ce qui le mit immédiatement sur la piste du parent, appelé DrGPolygonItem :
Ce qui permet de savoir comment est calculée la longueur d'un polygone de DrGeoII : en additionnant les longueurs de ses côtés comme à l'école. Pour effectuer cette addition, les longueurs sont d'abord enregistrées dans un tableau appelé sidesLength initialisé à un tableau vide.
Profilage
Mais l'enquête piétinant toujours, l'inspecteur fit alors appel à un profileur pour en savoir plus sur son suspect. Pour tester le profileur, il se rappela comment il avait additionné un jour un million de moutons, à cause d'une insomnie pendant une affaire particulièrement ardue : il avait demandé à la liste des nombres allant de 1 à 1000000 de sommer ses termes, et il exprima cette demande dans un workspace (obtenu en cliquant sur le bureau) :
Dans ce workspace, il entra la liste des nombres allant de 1 à 1000000 et sa demande d'addition :
Puis après avoir sélectionné le tout, il fit appel à lui-même (l'inspecteur) et obtint la somme au bout de moins d'une seconde :
Au passage, il obtint une liste de 5 octets numérotés de 1 à 5, ce qui lui apprit que le nombre 500000500000 s'écrit avec 5 octets. Mais il avait besoin du profileur pour savoir à quoi était consacrée la fraction de seconde que cela avait pris pour effectuer le million d'additions. Pour cela, il fit la même manoeuvre, mais en appelant le profileur au lieu de l'inspecteur :
Le résultat fut un rapport complet sur le profil du suspect :
Ce rapport révélait le principal coupable, les additions (de inject) : une fois de plus, le coupable utilisait une seringue !
Conclusion de l'enquête
Dans cet article, on a vu comment on peut utiliser Dr Geo pour voir comment Dr Geo est fait mais aussi pour voir comment Samlltalk est fait, on a vu également comment on peut évaluer les performances d'un algorithme.
Alain Busser
Enseignant de mathématiques,
animateur à l'IREM de l'île de la Réunion
Hilaire Fernandes
Enseignant de mathématiques, Dr. en informatique
|