Wiki

Clone wiki

pymoult / Démos Cymoult

Démonstrations

Afin de montrer l'utilisation de la libama et de la libuminati, nous avons implémenté deux types de managers décrits dans la page explicative du projet.

I. Utilisation des 2 managers

Le premier manager de la bibliothèque est le code de lamanager.c. Ce manager se lance à côté du programme et prend en paramètre le pid du programme à modifier. Les étapes à suivre pour l'exécuter sont :

#!

1. Dans un premier terminal, lancer le programme.
2.a. Dans un second terminal, utiliser "pgrep [nom du programme]" pour trouver son pid.
2.b. Ne pas oublier de changer les permissions de ptrace : "echo 0 > /proc/sys/kernel/yama/ptrace_scope" (peut nécessiter dtre exécuter en tant que root).
2.c. Lancer le manager ("./manager pid").
3.a. Dans un troisième terminal, utiliser "pgrep manager" pour trouver le pid du manager.
3.b. Exécuter "kill -SIGUSR1 managerpid" pour lancer la mise à jour.
Le second manager est le code de lamanager2.c. Ce manager lance le programme comme un processus fils et prend en paramètre le chemin du programme à lancer. Les étapes à suivre pour l'exécuter sont :
#!

1. Lancer "manager [chemin du programme à lancer]".
Dans les 2 cas, il ne faut pas oublier de placer un fichier (même vide) dans le répertoire de mise à jour (dynamic_updates/). Pour le moment, l'injection de code n'est pas implémentée, mais on imagine facilement que les fichiers présents dans ce répertoire seront les codes d'update. Ces 2 implémentations fournissent la possibilité de choisir quelles fonctions sont à mettre à jour ainsi que de préciser par lesquelles elles doivent être remplacées.

II. Différentes démonstrations

La première démonstration demo1/ contient 4 fonctions : tout d'abord un entier que l'on incrémente, puis que l'on décrémente, puis un sleep où on ne fait rien, et enfin une multiplication de l'entier par 2. Il y a donc 3 mises à jour à réaliser, celle contenant le sleep montrant le fait que l'on trouve une fonction dans la pile et que l'on attend avant de la modifier. Le second exemple est un jeu de snake/ repris d'internet (via le projet de Vincent Desprez), sur lequel nous avons utilisé nos managers pour changer le fonctionnement du jeu. La première mise à jour change le comptage des points ainsi que le changement de vitesse du serpent à chaque fruit. La seconde inverse les touches du clavier. Une troisième démonstration est prévue : transformer un jeu de snake en jeu de tétris. Son implémentation n'est pas encore terminée.

Updated