[C] Système de plugins "simpliste"
|
30-08-2012, 13h29
(Modification du message : 30-08-2012, 13h31 par supersnail.)
Message : #1
|
|
supersnail
Éleveur d'ornithorynques Messages : 1,609 Sujets : 71 Points: 465 Inscription : Jan 2012 |
[C] Système de plugins "simpliste"
Bonjour,
Je partage ici une petit système de "plugins" que j'ai développé en bidouillant un peu avec le C. Cependant avant de balancer directement le code, quelques petites explications s'imposent. I - Fonctionnement général Le plugin est ici une bibliothèque "liée dynamiquement", c'est-à -dire une DLL sous Windows, ou un .so sous GNU/Linux, qui sera chargée dynamiquement par le programme (via les fonctions LoadLibrary/GetProcAddress sous Windows, ou dlopen/dlsym sous GNU/Linux). Ce programme appelle ensuite la fonction plugin_init, qui prend pour argument une structure nommée plugin_interface. Cette structure est comparable à une interface C++, c'est-à -dire des pointeurs vers des fonctions. Pour mon programme de test, ma structure ressemble à ceci: Code : typedef struct _plugin_int { Maintenant, pourquoi tout ce bazar fonctionne ? La réponse est relativement simple. En réalité, le plugin est chargé dans l'espace mémoire du processus, ainsi il peut accéder à la mémoire de celui-ci (et par le fait, manipuler ses données). Le code (machine) résidant lui aussi en mémoire, notre plugin y a aussi accès, et il peut ainsi exécuter les fonctions de notre programme hôte (qui sera traduit en assembleur par un "call eax", eax contenant l'adresse de la fonction à appeler). II - Le code Le fichier "def.h" (à inclure dans chacun des plugins) Code : #ifndef _DEF_H Le code du programme (program.c) Code : #include <stdio.h> Le code du plugin de test (wtf.c) Code : #include "def.h" Le Makefile Code : all: program.o wtf.o Edit: le code fonctionne juste pour GNU/Linux, pour les windowsiens, renseignez-vous sur les fonctions "LoadLibrary" et "GetProcAddress" (la MSDN est votre amie)
Mon blog
Code : push esp ; dec eax ; inc ebp ; and [edi+0x41],al ; dec ebp ; inc ebp "VIM est merveilleux" © supersnail |
|
Messages dans ce sujet |
[C] Système de plugins "simpliste" - par supersnail - 30-08-2012, 13h29
RE: [C] Système de plugins "simpliste" - par Ark - 30-08-2012, 13h50
RE: [C] Système de plugins "simpliste" - par supersnail - 30-08-2012, 13h51
RE: [C] Système de plugins "simpliste" - par Ark - 30-08-2012, 13h55
RE: [C] Système de plugins "simpliste" - par b0fh - 30-08-2012, 14h31
RE: [C] Système de plugins "simpliste" - par supersnail - 30-08-2012, 14h39
|
Utilisateur(s) parcourant ce sujet : 4 visiteur(s)