IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Assembleur Discussion :

Créer un langage de programmation


Sujet :

Assembleur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Décembre 2013
    Messages : 8
    Par défaut Créer un langage de programmation
    Bonsoir, à tous,
    Si j'ai démarrer cette discussion, c'est pour demander un exemple, juste un exemple, voilà mon problème:
    Je veux donc créer mon langage de programmation, et je veux savoir (un exemple sans commentaire me suffirait):
    Que donnerais un programme assembleur (32 bits / Linux) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    .global _start #directive
    .text
      mov $0,%eax
    En format objet elf 32 ?

  2. #2
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Décembre 2013
    Messages : 8
    Par défaut
    Et ne me dîtes pas que je n'ai qu'à le compiler moi-même, car tous les docs que j'ai trouver sur le format elf étaient trop flous

  3. #3
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 499
    Par défaut
    Citation Envoyé par Michael Douglas Voir le message
    Bonsoir, à tous,
    Si j'ai démarrer cette discussion, c'est pour demander un exemple, juste un exemple, voilà mon problème:
    Je veux donc créer mon langage de programmation, et je veux savoir (un exemple sans commentaire me suffirait):
    Que donnerais un programme assembleur (32 bits / Linux) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    .global _start #directive
    .text
      mov $0,%eax
    En format objet elf 32 ?
    Ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    0000000: 7f45 4c46 0101 0100 0000 0000 0000 0000  .ELF............
    0000010: 0100 0300 0100 0000 0000 0000 0000 0000  ................
    0000020: 6800 0000 0000 0000 3400 0000 0000 2800  h.......4.....(.
    0000030: 0700 0400 b800 0000 0000 0000 002e 7379  ..............sy
    0000040: 6d74 6162 002e 7374 7274 6162 002e 7368  mtab..strtab..sh
    0000050: 7374 7274 6162 002e 7465 7874 002e 6461  strtab..text..da
    0000060: 7461 002e 6273 7300 0000 0000 0000 0000  ta..bss.........
    0000070: 0000 0000 0000 0000 0000 0000 0000 0000  ................
    0000080: 0000 0000 0000 0000 0000 0000 0000 0000  ................
    0000090: 1b00 0000 0100 0000 0600 0000 0000 0000  ................
    00000a0: 3400 0000 0500 0000 0000 0000 0000 0000  4...............
    00000b0: 0400 0000 0000 0000 2100 0000 0100 0000  ........!.......
    00000c0: 0300 0000 0000 0000 3c00 0000 0000 0000  ........<.......
    00000d0: 0000 0000 0000 0000 0400 0000 0000 0000  ................
    00000e0: 2700 0000 0800 0000 0300 0000 0000 0000  '...............
    00000f0: 3c00 0000 0000 0000 0000 0000 0000 0000  <...............
    0000100: 0400 0000 0000 0000 1100 0000 0300 0000  ................
    0000110: 0000 0000 0000 0000 3c00 0000 2c00 0000  ........<...,...
    0000120: 0000 0000 0000 0000 0100 0000 0000 0000  ................
    0000130: 0100 0000 0200 0000 0000 0000 0000 0000  ................
    0000140: 8001 0000 5000 0000 0600 0000 0400 0000  ....P...........
    0000150: 0400 0000 1000 0000 0900 0000 0300 0000  ................
    0000160: 0000 0000 0000 0000 d001 0000 0800 0000  ................
    0000170: 0000 0000 0000 0000 0100 0000 0000 0000  ................
    0000180: 0000 0000 0000 0000 0000 0000 0000 0000  ................
    0000190: 0000 0000 0000 0000 0000 0000 0300 0100  ................
    00001a0: 0000 0000 0000 0000 0000 0000 0300 0200  ................
    00001b0: 0000 0000 0000 0000 0000 0000 0300 0300  ................
    00001c0: 0100 0000 0000 0000 0000 0000 1000 0000  ................
    00001d0: 005f 7374 6172 7400                      ._start.

    Citation Envoyé par Michael Douglas Voir le message
    Et ne me dîtes pas que je n'ai qu'à le compiler moi-même,
    Pourquoi pas ? ELF32 (ou 64) est le format utilisé par défaut par toutes les distributions de Linux. Il te suffit de lancer as --32 tonfichier.asm pour avoir le résultat.

    Qu'est-ce qui t'en empêche ?

    car tous les docs que j'ai trouver sur le format elf étaient trop flous
    C'est une plaisanterie ? C'est par définition l'un des formats les plus ouverts et les plus documentés qui soient. Es-tu sûr d'avoir bien cherché ?

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Décembre 2013
    Messages : 8
    Par défaut
    Oui, mais ce que je veux, moi, c'est pouvoir l'intégrer dans mon futur-compilo, donc, il me faut les détails, comme oú sont exactement les opcodes, a quoi servent les '/' oú on met la taille des segments, et surtout, ne me sortez pas man elf ou elf.h, ça ne me servirais a rien. (et si ça pouvait servir dans mon cas, dîtes moi exactement comment faire).

  5. #5
    Membre Expert
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Par défaut
    Cette blague ! comme si c'était aussi simple...

  6. #6
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Décembre 2013
    Messages : 8
    Par défaut
    À forthman: Si t'as juste ça dire...

  7. #7
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 499
    Par défaut
    Citation Envoyé par Michael Douglas Voir le message
    Oui, mais ce que je veux, moi, c'est pouvoir l'intégrer dans mon futur-compilo, donc, il me faut les détails,
    As-tu au moins essayé de saisir « ELF format » dans Google ? Tu obtiens une quantité ahurissante de réponses dans toutes les langues.

    Notamment celle-ci : http://docs.oracle.com/cd/E23824_01/...html#scrolltoc
    Et les pages de Wikipédia en français et en anglais, qui te permettent de rentrer rapidement dedans sans avoir à explorer tous les détails d'un coup.

    Le format ELF est comparable au COFF qui a lui même engendré le PE des exécutables Win32. Ce n'est pas un format simple : il peut embarquer toutes sortes de données, pas seulement du code, et est décomposé en une suite de section et de tables en tous genres.

    comme oú sont exactement les opcodes,
    Le code exécutable se trouve historiquement dans la section « .text » (même si c'est contre-intuitif). Mais il faut plus d'info : l'adresse d'implantation, le point d'entrée, et éventuellement la table des symboles à relocaliser.

    a quoi servent les '/'
    Quels « / » ?

    oú on met la taille des segments, et surtout, ne me sortez pas man elf ou elf.h, ça ne me servirais a rien. (et si ça pouvait servir dans mon cas, dîtes moi exactement comment faire).
    Tu te rends compte que tu veux écrire un langage produisant du code exécutable sans lire une seule man page ni faire une recherche Google ?

    La man page de ELF est pourtant, effectivement, la meilleure source d'informations que tu puisses trouver. Raffinement ultime, tu la trouves ici en français et mise en forme pour le web.

    Si c'est ce qui te pose problème, la syntaxe que tu vois (avec les « { } ») est celle du langage C car son histoire est intimement liée à celle d'UNIX, mais ce n'est pas un problème en soi : « uint32_t » signifie « unsigned int 32 bit type », donc un entier en binaire naturel non signé sur 32 bits (4 octets), typique des formats des registres x86, en particulier.

    Il faut se faire à l'idée, également, qu'à part dans le header principal, il n'y a aucune adresse absolue dans un fichier ELF (pas plus que dans un COFF ou un EXE Win32). Il s'agira à chaque fois d'un offset par rapport au début de la section, elle-même localisée soit relativement aux sections précédentes, soit en fonction de ce qui est indiqué dans une table.

    Au boulot maintenant.

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 407
    Par défaut
    > On a pas de doc "secret-defense" que d'autres n'ont pas Michael <
    D'ailleurs, tu me fais beaucoup penser à quelqu'un d'autres qui a posé des questions similaires il y a quelques temps.
    Regarde, tu verras qu'on lui a répondu la même chose:
    http://www.developpez.net/forums/sea...archid=9873009
    Et en particulier ce topique pour l'elf:
    http://www.developpez.net/forums/d13...ecutable-unix/

  9. #9
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 540
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 540
    Par défaut
    Citation Envoyé par Michael Douglas Voir le message
    Oui, mais ce que je veux, moi, c'est pouvoir l'intégrer dans mon futur-compilo, donc, il me faut les détails, comme oú sont exactement les opcodes, a quoi servent les '/' oú on met la taille des segments, et surtout, ne me sortez pas man elf ou elf.h, ça ne me servirais a rien. (et si ça pouvait servir dans mon cas, dîtes moi exactement comment faire).
    Les opcodes du CPU ?
    Cela dépend du CPU évidemment ; d'après ce que tu as donné comme code c'est du code Intel donc il faudra décortiquer le jeu d'instruction du x86 .
    A savoir quel code tu vas générer selon que dans le fichier source on trouve mov eax,registre ou mov eax,valeur_immediate.
    Si tu veux créer ton langage de programmation c'est tout un projet qui risque d'être ardu car tu devras d'abord écrire un interpréteur de langage "évolué" genre Basic, Java ou C ou tout ce que tu veux puis générer ce code en code assembleur

  10. #10
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Décembre 2013
    Messages : 8
    Par défaut
    À obsidian: Je connais dans les grandes lignes le format elf (avec les en-têtes et tout) mais ce que je veux, c'est savoir comment passe de .s a exécutable
    À n5r: AND66 est un compte à moi, mais mon compte Google associé à ce compte s'étant soudainement mît à se vider périodiquement, j'ai jugé bon de recréer un compte mail et aussi de réinitialiser les comptes qui y étaient associés.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Créer un langage de programmation
    Par conagui dans le forum Assembleur
    Réponses: 12
    Dernier message: 17/02/2015, 00h44
  2. Comment créer un langage de programmation?
    Par Terfas dans le forum Langages de programmation
    Réponses: 1
    Dernier message: 06/01/2015, 10h53
  3. Comment créer un langage de programmation ?
    Par @v@lon dans le forum Langages de programmation
    Réponses: 27
    Dernier message: 16/06/2014, 22h04
  4. Je souhaite créer un langage de programmation
    Par Tijl12 dans le forum Langages de programmation
    Réponses: 13
    Dernier message: 20/05/2014, 22h32
  5. Créer un langage de programmation pour ensuite interpréter du PHP
    Par psgkiki dans le forum Langages de programmation
    Réponses: 12
    Dernier message: 25/06/2008, 10h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo