Langage C: Gérer les segments de code
Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

Langage C: Gérer les segments de code



  1. #1
    lahmed

    Post Langage C: Gérer les segments de code


    ------

    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:

    Code:
    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;
    }
    Après une petite recherche je me suis tombé sur les différent type des zones mémoires : lecture, lecture-écriture
    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 ....

    -----
    Dernière modification par JPL ; 06/03/2013 à 19h11. Motif: Remplacement de la balise PHP par la balise Code (#)

  2. #2
    Jack
    Modérateur

    Re : Langage C: Gérer les segments de code

    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????
    L'OS déclare le segment de code comme read only.

    Je me demande parce que les machines virtuelles exécutent des instructions machines sans créer un nouveau processus !!!
    On peut voir la source de cette affirmation?

  3. #3
    Jack
    Modérateur

    Re : Langage C: Gérer les segments de code

    Code:
    	sh[c++]='U'; //Je commence à copier les suites d'instructions de f dans sh
    	sh[c++]='H';Cest quoi U, H, etc?
    Ca représente quoi les caractères U et H ????

  4. #4
    lahmed

    Re : Langage C: Gérer les segments de code

    Merci bcp, ...
    En ce qui concerne les machines virtuelles je l'ai testé sur mon PC
    Les caractères 'U', 'H' sont les octets des instructions que j'ai copié d'une fonction que j'avais déjà déclarée =) ( la fonction f )
    Une solution que j'ai trouvée est d'enregistrer les instruction dans un fichier .exe et de l'exécuter à partir du système ( le console dans mon cas )
    Mais est-il de cette façon que fonctionnent les machines virtuelles ?? ou-bien le système donne service d'exécuter un bloc d'instructions après l'avoir fait les traitements nécessaires à partir d'un segment DATA???
    Si je n'ai jamais bien déclaré mon problème, merci de m'expliquer comment fonctionnent les machines virtuelles et vraiment merci =)

  5. A voir en vidéo sur Futura
  6. #5
    Jack
    Modérateur

    Re : Langage C: Gérer les segments de code

    Je ne comprends vraiment pas ce que tu cherches à démontrer. Une machine virtuelle est un processus lancé par une machine hôte permettant de faire tourner un système d'exploitation.

Discussions similaires

  1. Un langage codé léger, 2 caractères non codé=1 caractère codé. Une solution?
    Par invite06e0b926 dans le forum Mathématiques du supérieur
    Réponses: 1
    Dernier message: 30/06/2010, 10h02
  2. langage C probléme avec code blocks
    Par inviteb6dc9791 dans le forum Logiciel - Software - Open Source
    Réponses: 10
    Dernier message: 22/02/2010, 09h31
  3. Décodeur BCD - 7 Segments en langage Assembleur 8051
    Par invite79668502 dans le forum Électronique
    Réponses: 4
    Dernier message: 30/09/2009, 08h43
  4. Compteur sept segments (langage c)
    Par invite50d1f88a dans le forum Électronique
    Réponses: 23
    Dernier message: 01/02/2009, 13h24
  5. [Latex] Formatter du code en langage C
    Par Rodrigue dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 29/06/2006, 08h36