SVP, quelqu'un me dit s'il est possible de modifier le code de son programme lors de son exécution ou-bien le SE (windows dans mon cas) ne le permet pas????
Je me demande parce que les machines virtuelles exécutent des instructions machines sans créer un nouveau processus !!! C'est à dire qu'elles écrient des instructions dans la RAM puis les exécutent (avec un jump)?? Quand j'essaie de faire ça avec C j'arrive pas à l'exécuter, un erreur persiste pendant toutes mes essaies =(.. Vois-ci un exemple:
Après une petite recherche je me suis tombé sur les différent type des zones mémoires : lecture, lecture-écritureCode:typedef int (*p_fct)(); int f() { return 'D'; } main() { char *p=(char*) f; //J'ai fait ce ci pour lire le code machine de f char c=0; char *sh=(char *)malloc(20); p_fct func; sh[c++]='U'; //Je commence à copier les suites d'instructions de f dans sh sh[c++]='H'; sh[c++]='‰'; sh[c++]='å'; sh[c++]='¸'; sh[c++]='D'; // Cette 'D' est la valeur de retour de la fonction sh[c++]=0; sh[c++]=0; sh[c++]=0; sh[c++]=']'; sh[c++]='Ã'; func=(p_fct) sh; printf("%c", func()); // En principe ceci m'affiche D mais le programme se plante au niveau de cette instruction return 0; }
Peut être que les zones en lectures-écritures ne sont pas exécutables, et les zones d'exécution ne sont pas accessibles en écriture ....
Si ce ci est vrai SVP comment fonctionnent donc les machines virtuelles,?
Et merci ....
-----