Le langage SMS est exclu sur les forums ProgBoards, tout message ne respectant pas la charte sera déplacé, modifié, ou supprimé par nos modérateurs.

Forum Langages » C & Cie. » créer des fonctions de manière dynamique

Freem
Modérateur
Citer Windows XP Msie 6 - Posté le 19/01/2007 à 22:34
Je me demandais comment créer des fonctions de manière dynamique.
C'est à dire que j'ai un pointeur de type void * que je souhaite utiliser pour appeler une fonction en ayant moi même alloué la mémoire.
avec un code du style:


FILE * fic;
void * func=0 ;
char *contenu;
int tllFunc=0x0100; //par exemple

fic=fopen("fonction.nimp");
func=malloc(tllFunc);
fread(func,tllFunc,1,fic);



A priori, ca me pose surtout un problème pour le format du code, puisque le compilateur colle une en tête et que je n'en connait pas la structure...
En fait, ce n'est pas vraiment le chargement des données qui me pose un problème mais plutôt l'enregistrement... J'aimerais savoir s'il est possible de les enregistrer dans un fichier a partir de la mémoire, ce qui serait le plus simple.
Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends. - Benjamin Franklin
zuzuf
ProgBoarder
RemonterCiter Linux Firefox 2 - Posté le 20/01/2007 à 00:32
oulala, c'est mal parti comme ça!

Faut utiliser les fonctions de ton système d'exploitation pour la gestion de plug-ins/ chargement de bibliothèques de liens dynamiques.

Le truc c'est alors de compiler la fonction que tu veux directement dans ton fichier et de charger ce binaire avec les fonctions de l'OS, et ne fait pas ça toi même il risquerait d'y avoir des failles de sécu et des risques de plantages dûs à la protection contre l'exécution non autorisée de code binaire.
Linux a un noyau, windows un pepin
Freem
Modérateur
RemonterCiter Windows XP Msie 6 - Posté le 20/01/2007 à 00:39
Le problème est que j'aurai voulu garder une certaine indépendance par rapport a l'OS.
Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends. - Benjamin Franklin
Fred
ProgBoarder
RemonterCiter Windows XP Firefox 1 - Posté le 20/01/2007 à 11:25

Citation"failles de sécu et des risques de plantages"



Bien dit zuzuf, m'enfin le chargement et l'appel de fonctions
de DLL c'est pas énormément plus sécurisant si tu bosses
sous win.

Quel est le but de ton programme, pourquoi veux tu charger
des fonctions depuis un fichier bin ? Ok ca fait cool mais
bon ça m'évoque plus la programmation des consoles ton
truc. (héhé
Purée faut que je change d'avatar !
zuzuf
ProgBoarder
RemonterCiter Linux Firefox 2 - Posté le 20/01/2007 à 11:40
ta méthode n'aurait pas rendu ton programme multiplateforme. Les fonctions que tu vas charger seront dépendantes de l'OS (ne serait-ce que par les accès à la mémoire, la gestion de la pile d'exécution etc...) et le contournement des protections contre l'exécution non autorisée de code n'aurait pas été multiplateforme non plus.
Linux a un noyau, windows un pepin
Freem
Modérateur
RemonterCiter Windows XP Msie 6 - Posté le 20/01/2007 à 21:27
ok.tant pis.
Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends. - Benjamin Franklin
zuzuf
ProgBoarder
RemonterCiter Linux Firefox 2 - Posté le 21/01/2007 à 18:08
mais il reste toujours possible d'utiliser des fonctions extérieures au programme maître. C'est juste inutile de reprogrammer ce que le système d'exploitation est censé faire pour toi, surtout à ce niveau là (ça requière pas mal de connaissances sur le fonctionnement du noyau)
Linux a un noyau, windows un pepin
Freem
Modérateur
RemonterCiter Windows XP Msie 6 - Posté le 27/01/2007 à 03:24
Je voulait faire un progrmme qui soit capable d'utiliser des fonctions extérieures de manière dynamique et protable, en fait.
Je veut dire, un programme auquel on donne par exemple le nom d'un fichier contenant la fonction dont on souhaite qu'elle soit éxecutée, sans que cela (que cette fonction) ait été prévu(e)...
Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends. - Benjamin Franklin
zuzuf
ProgBoarder
RemonterCiter Linux Firefox 2 - Posté le 27/01/2007 à 15:59
c'est ce qu'on appelle un plug-in, il y a beaucoup de documentation la-dessus sur internet. Le principe c'est que tu charges dans ton fichier plug-in la liste des fonctions qu'il contient et comment les utiliser. Lorsque ton programme charge des plug-ins il garde en mémoire ces données, pour savoir alors comment utiliser ces fonctions. Tu n'as pas besoin de recoder tout les mécanismes de chargement, ils existent déjà. Une fois que tu connais le nom de la fonction que tu cherches dans le fichier, tu demande à la charger et à obtenir un pointeur vers son code. Tu peux alors l'exécuter. C'est le principe des extensions sous Firefox ou encore The GIMP.

Mais il y a plein de documents sur internet qui sauront t'expliquer tout ça mieux que moi.
Linux a un noyau, windows un pepin
Freem
Modérateur
RemonterCiter Windows XP Msie 6 - Posté le 28/01/2007 à 04:07
ah, c'est cool, ca... exactement ce qu'il me faut.
Je vais faire des recherches et je mettrai les liens ici après.
Merci Zuzuf

[edit]
J'avais trouvé ça, mais je me rappelle plus ou...
Surtout que c'est une galère monstre, car tout le monde parle de: comment créer un plugin pour tel ou tel soft (diable)

Edité par Freem ( 27/10/2007 00:47:27 )
Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends. - Benjamin Franklin

Poster une réponse

STOP aux fautes volontaires !
Message
Formatage
Note: pour partager du code source, merci d'utiliser le wall !
Smileys (sourire) (yekyek) (clein d'oeil) (désapprouve) (triste) (cool) (langue) (confus) (gêné) (neutre) (eek) (surpris) (diable) (flèche) (exclamation) (question) (diable) (idée) (méchant)
Pseudonyme
Recopiez le code
v6 © Computaid SPRL 2005-2008 - Tous droits réservés - Hébergé par eTigris - Page générée en 0,034 s - Crédits - Stats
1 connecté