Forum Programmation.autre code automodifiable

Posté par  .
Étiquettes : aucune
0
17
mar.
2005
Bonjour,

Existe-t-il des cours ou des tutoriaux sur comment faire du code automodifiable ?
Par automodifiable j'entend un programme capable de modifier des parties de son code que ce soit pour optimiser un algorithme, se rajouter des fonctionnalités, etc...


J'imagine que ce doit être plus "facile" avec des langage de script plutôt qu'avec des langages compilés. C'est pour cela que ma préférence revient aux langages de script.
  • # Re:

    Posté par  . Évalué à 3.

    Eh bien c'est sûr que pour des langages compilés, ça ne doit pas être une mince affaire...

    La seule fois où j'ai fait ça, c'était pour un programme écrit en assembleur Saturn qui avait besoin de la moindre optimisation.

    Mais pour les langages de script, je ne vois pas de réelles difficultés, la manière la plus simple serait d'écrire le code changeant dans un fichier séparé, et d'inclure ce fichier quand il faut.
    • [^] # Re: Re:

      Posté par  (site Web personnel) . Évalué à 1.

      La seule fois où j'ai fait ça, c'était pour un programme écrit en assembleur Saturn qui avait besoin de la moindre optimisation.

      oh puree, tu sens la HP38/48 comme un troll sent le chat mort a 10 bornes ... :)

      oui en assembleur c est effectivement simplissime, mais en C compile aussi.

      Et AMHA, c est sur les scripts que c est le plus dur ... car beaucoup de scripts sont precompiles a l execution (Perl5 vs Perl4) ... et il reste peu de langage purement interpretes a la volee ( PHP ?).

      Note que sur certains systems, il est interdit de modifier l executable a la volee (cf certains RISC et les archis a deux BUS, comme la plus part des DSP embarques), mais la plus part des systems sur i386 le permettent. Il parait que c est comme ca que NVidia essaye de decourager les desassemblage de ses drivers.

      Le tout c est de trouver les pointeurs sur le code fonctionnel, et attaquer les sauts. Mais sur de l interprette pure, je vois pas comment pecho les adresse du script (car tous les pointeurs de fonctions vont pointer vers les codes ASM ... )

      Mais si tu trouve des tuto, je suis aussi interesse.
      • [^] # Re: Re:

        Posté par  . Évalué à 2.

        oh puree, tu sens la HP38/48 comme un troll sent le chat mort a 10 bornes ... :)

        Bah quoi ? :-) De toute façon, le Saturn avec ses registres 64 bits, tous ses champs de registres, ses calculs qui peuvent se faire indifféremment en binaire ou en décimal, ça roxors des grand-mères ours.

        Et AMHA, c est sur les scripts que c est le plus dur

        En fait, je pensais tout simplement aux commandes du type eval(str), ou str est une chaîne de caractère à évaluer. Je pense que tout langage de script possède ce genre de fonction. Enfin en tout cas, de mémoire, pour les langages "de script" que j'ai déjà fréquenté, ça existe : javascript, php, camllight, bash.

        Donc, ce qu'on peut faire, c'est écrire le code qui change dans un fichier d'include. Au lancement du programme, on inclut ce fichier. Par contre, si le programme s'automodifie en cours d'exécution, il va falloir utiliser le eval(str) dont j'ai parlé, tout en ayant sauvegardé le contenu de la variable str dans le fichier d'include, pour l'utiliser à la prochaine exécution.

        Pour les langages compilés, il me semble très difficile de modifier le fichier exécutable directement. Par contre, on peut théoriquement écrire à la volée une bibliothèque partagée qu'on charge/décharge sur demande.
        • [^] # Re: Re:

          Posté par  (site Web personnel) . Évalué à 1.

          le Saturn avec ses registres 64 bits

          64 ? t est sur ? le bus d adresse est sur 20(5 quartets), mais je pensais me rappeler que les registre mathematiques etaient sur 80bits (20 quartets) ...

          Je pense que tout langage de script possède ce genre de fonction.

          a condition que l interpreteur veuille bien te donner l adresse memoire du script, et que le script ne soit pas precompile ... et dans ce dernier cas, c est pareil que si tu etais en C ou ASM :)

          au fait ... pour ceux qui cherchent a ecrire du C interprete, je rappelle l existance de tcc : http://www.doublehp.org/tcc.png(...)

          notez bien le: ./main.c

          Pour les langages compilés, il me semble très difficile de modifier le fichier exécutable directement.

          je pense au contraire que c est simple ... tu pecho l adresse d un saut, les adresse de deux ou trois routines, et a l endroit du saut, tu change l adresse de saut. ( attention si ce sont des sauts relatifs, les precalculs ne seront pas triviaux )

          Par contre, on peut théoriquement écrire à la volée une bibliothèque partagée qu'on charge/décharge sur demande.

          oh tu me donnes des idees toi :=) va faloir qu on discutte tres serieusement ... on sent mien chez toi l experience HP, teinté d une fine touche de bourinnage en fesant semblant d eviter le glosbillisme.

          Apres tout, tcc ne pese que 80k, et l embarquer dans un exe me semeble pas la mer a boire ... si ce petit bijoux pouvait aussi generer des librairies, je sent que je vais faire des petites nuits blanche tres bientot ...
          • [^] # Re: Re:

            Posté par  (site Web personnel) . Évalué à 1.

            le Saturn avec ses registres 64 bits

            64 ? t est sur ? le bus d adresse est sur 20(5 quartets), mais je pensais me rappeler que les registre mathematiques etaient sur 80bits (20 quartets) ...


            Les registres sont bien de 64 bits
            Je me souvient faire des trucs du genre : C=DAT0.W qui sont équivalent à DAT0.16 et 16*4=64 :-)

            Et il semble de toute façon plus logique d'avoir une puissance de deux comme taille

            Sinon, pour le code généré, en asm c'est très simple (j'en avais testé un peu sur winsos si y'en a qui connaissent ;-) ) car il suffit de se réserver de la place, écrire le code (en bin, hex) et d'éxecuter dessus

            Pour les langages de script ça doit pouvoir se faire un peu pareil sauf qu'on a pas besoin d'écire en binaire. Il suffit par exemple qu'un programme écrive son code dans un fichier (je sais pas si c'est possible avec une zone mémoire) et ensuite d'exécuter le fichier, ç'est pas trop compliqué

            Par contre, pour du code compilé, normalement c'est compilé en asm donc il faudrait écrire de l'asm et l'exécuter (ce serait le plus "simple")
            Sinon, il faudrait pouvoir recompiler le code à la volée, et là à mon avis c'est plus dur.

            Donc le mieux c'est de le faire en asm :-)
            • [^] # Re: Re:

              Posté par  (site Web personnel) . Évalué à 1.

              bah je te dis, tu compile ton programme en statique avec un TCC remodele en librairie, et tu peux generer a la volee ton code C, le compiler en appelant TCC, et l executer avec un fork ...

              ca me parait tres marrant a faire. Je te promet d avoir essaye dans les 6 prochains mois.
  • # A voir coté virus

    Posté par  . Évalué à 2.

    Il me semble que c'est ce que certains virus font pour ne pas se faire detecter par un antivirus. Donc je te conseille d'aller voir des infos la-dessus, ca ne doit pas manquer.
  • # oRis

    Posté par  . Évalué à 2.

    Dans l'école d'Ingénieurs dont je sors, on utilisait un langage développé par l'école, oRis. C'est de la programmation agent (comme des objets, mais ayant en plus de l'autonomie). Et le but est principalement de travailler dans la réalité vituelle.

    C'est un langage de scripts, compilés à l'exécution par une sorte de machine virtuelle. Mais une fois l'exécution en cours, on peut modifier le code, et le recompiler pour faire appliquer directement ces modifications, sans interrompre la simulation. Et ces modifications peuvent se faire au choix sur une classe ou sur des instances. Et évidemment, dans le code lui même, on peut programmer des modifications du code de n'importe quel éléments de la simulation.

    C'est tout simplement génial !

    Pour le télécharger, ainsi que les quelques docs et cours, c'est ici :

    http://www.enib.fr/~harrouet/(...)

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n’en sommes pas responsables.