Bonjour,
j'essaie de faire un petit programme qui charge le binaire d'une dll en mémoire et l'exécute, c'est à dire charge les octets correspondants à une DLL en mémoire, et exécute une fonction de la DLL sans passer par une écriture sur disque.
Après avoir cherché sur les newsgroups, j'ai trouvé quelques infos intéressantes.

Seems to me you could use LoadResource() to get the binary resource
into memory, copy it over to some committed pages allocated with
VirtualAlloc(), then execute it after changing the protection of the
pages with the PAGE_EXECUTE_READWRITE flag to VirtualProtect().

Haven't tried it, but it should work.

Good luck,
G. Levand
Pour ma part, je ne stocke pas cette DLL en ressource mais sous forme d'un tableau d'octets

unsigned char res[]={0x9B,0xA9,0x80 ........ };
Ensuite, j'essaie de faire ce que dit le post des News :

LPVOID addr = VirtualAlloc(NULL, 57484, MEM_COMMIT, NULL);
PDWORD OldProtect;
VirtualProtect(addr, 57484, PAGE_EXECUTE_READWRITE, OldProtect);
memcpy(addr, res, 57484);
Mais déjà à ce niveau, je plante sur le memcpy.
Si quelqu'un a une idée...
Sinon, je n'ai pas trop idée de comment m'y prendre une fois la DLL copiée en mémoire. Je ne pense pas qu'un simple GetProcAddress() fonctionne.

Merci

PS : pour info, j'ai lu les autres posts traitant du sujet, et disant que ce n'est pas possible. Mais d'après plusieurs posts sur les newsgroups, c'est bel et bien possible (pas forcément facile, mais possible). En gros je veux juste executer un code binaire en mémoire, en y associant un pointeur de fonction.