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

Programmation d'OS Assembleur Discussion :

Utiliser le format ELF pour son système d'exploitation perso


Sujet :

Programmation d'OS Assembleur

  1. #1
    Membre confirmé Avatar de bifur
    passe le balais et l'aspirateur
    Inscrit en
    Mars 2008
    Messages
    314
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : passe le balais et l'aspirateur

    Informations forums :
    Inscription : Mars 2008
    Messages : 314
    Points : 550
    Points
    550
    Par défaut Utiliser le format ELF pour son système d'exploitation perso
    Je suis actuellement en train de réfléchir à la possibilité d'utiliser le format ELF pour mes fichiers exécutables dans mon système d'exploitation.

    D'abord voilà comment est prévu de fonctionner mon système : mode protégé 32bits avec utilisation de la segmentation, chaque tâche a sa propre LDT qui contient les descripteurs de la mémoire utilisée (pile, code et données) l'IRQ timer est configurée pour se déclencher toutes les 2.5 ms et fait "commuter" les tâches toutes les X*2.5 ms en sauvegardant/restaurant les registres et flags sur la pile de chaque tâche.

    Actuellement, j'ai défini un format de fichier spécial pour mon système d'explotation, qui permet de définir un segment de pile, un segment de code et 4 segments de données (un pour chaque sélecteur de segment possible) pour chaque tâche.
    Je suis en train de me demander s'il ne serait pas plus judicieux d'utilliser un format de fichier exécutable déjà existant ?
    Est-ce que l'on peut signaler dans le format de fichier ELF que le fichier n'est exécutable que dans un seul environnement ? J'ai essayé dans un fichier de commencer mon programme par : format ELF executable xx (avec plusieurs valeurs pour xx) mais mon Linux a tout de même bien voulu le charger (ce qui a bien sûr fini par une erreur core dumped).

    Si vous aviez des suggestions/idées/critiques qui me permettraient de trancher...

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Juin 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2012
    Messages : 2
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par bifur Voir le message
    je suis en train de me demander si il ne serait pas plus judicieux d'utilliser un format de fichier executable déja existant?
    De mon point de vue, ca dépend de ton objectif vis à vis du travail que tu fais.
    De mon côté, je suis parti du principe que j'utilise des formats ou des standards existants quand c'est disponible. Mon objectif étant plutôt l'architecture de l'os et son développement, plutôt que de tout inventer. Donc, je vais utiliser le format ELF quand j'en serais arrivé là, si j'arrive jusque là.

    Citation Envoyé par bifur Voir le message
    est ce que l'on peut signaler dans le format de fichier ELF que le fichier n'est executable que dans un seul envirommement?
    Quel est ton objectif par rapport à ca ? tu veux t'assurer que les exécutables produits pour ton os ne puissent pas s'exécuter sur d'autres ou au contraire vérifier que l'exécutable peut s'exécuter sur ton système ?

  3. #3
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 452
    Points : 43 103
    Points
    43 103
    Par défaut
    Regardes les spécs du format ELF dont voici un résumé :
    https://fr.wikipedia.org/wiki/Execut...Linking_Format

    Tu verras que tu peux jouer avec les champs ABI et machine cible.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  4. #4
    Membre confirmé Avatar de bifur
    passe le balais et l'aspirateur
    Inscrit en
    Mars 2008
    Messages
    314
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : passe le balais et l'aspirateur

    Informations forums :
    Inscription : Mars 2008
    Messages : 314
    Points : 550
    Points
    550
    Par défaut
    mon objectif est de pouvoir signaler aux systèmes qui essayerait d'executer un fichier créer pour mon système de ne pas le faire car je n'uttilise pas les mêmes interruptions pour mes fonctions système et aussi pour que mon système puisse reconaitre les executable qui sont compatible

    pour ce qui est du champ ABI du format de fichier ELF c'est celui la qui est modifié par la directive "format ELF executable ??" pour FASM et curieusement mon ordinateur ne se pose pas de question et execute quand même le fichier! (j'ai vérifié que le champ était bien modifié a l'éditeur hexadecimal)

  5. #5
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 452
    Points : 43 103
    Points
    43 103
    Par défaut
    Je ne sais pas si les champs sont informatifs ou vérifiés par les fonctions exec.

    mon objectif est de pouvoir signaler aux systèmes qui essayerait d'executer un fichier créer pour mon système de ne pas le faire car je n'uttilise pas les mêmes interruptions pour mes fonctions système et aussi pour que mon système puisse reconaitre les executable qui sont compatible
    Dans ce cas, n'utilises pas ELF.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  6. #6
    Membre confirmé Avatar de bifur
    passe le balais et l'aspirateur
    Inscrit en
    Mars 2008
    Messages
    314
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : passe le balais et l'aspirateur

    Informations forums :
    Inscription : Mars 2008
    Messages : 314
    Points : 550
    Points
    550
    Par défaut
    l'avantage que je souhaitait tirer de l'utillisation du format ELF était de pouvoir facilliter le dévellopement de programme dans d'autres language que l'assembleur mais peut être que c'est possible autrement

  7. #7
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 452
    Points : 43 103
    Points
    43 103
    Par défaut
    Je viens de faire un essai, j'ai mis à 0 les 4 premiers octets d'un fichier ELF. Le fichier ne démarre pas sous Linux : message :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fichier binaire impossible à lancer
    Tu peux donc compiler avec les outils normaux, puis modifier ces 4 octets d'en-tête, de façon à ce que ce ne soit plus un ELF valide, bien que le reste du contenu l'ai.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  8. #8
    Membre confirmé Avatar de bifur
    passe le balais et l'aspirateur
    Inscrit en
    Mars 2008
    Messages
    314
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : passe le balais et l'aspirateur

    Informations forums :
    Inscription : Mars 2008
    Messages : 314
    Points : 550
    Points
    550
    Par défaut
    la modification post compilation de l'executable pourrait être une bonne solution...

    voici une source d'un hello world sous mon format:

    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
    pile equ 4096 ;definition de la taille de la pile
    include "fe.asm"
    code:
    org 0
    ;données du segment CS
    mov ax, sel_dat1
    mov ds,ax
    mov eax,6        
    mov edx,message
    int 61h
     
    int 60h
     
    data1:
    org 0
    message:
    db "Bonjour!",0
    data2:
    org 0
    ;vide
    data3:
    org 0
    ;vide
    data4:
    org 0
    ;vide
    findata:
    avec le fichier fe.asm:
    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
    31
    32
    33
    34
    35
    org 0
    db "FE "                         ;signale le type du fichier  
    db "1"                           ;version du fichier
    dd pile                          ;taille de la pile
    dd code                          ;adresse de la zone de code
    dd data1                         ;taille du segment de code   
     
    dd 0                             ;réservé pour un usage ultérieur
    dd 0
    dd 0
    dd 0
     
    dd code+data1                    ;adresse des data 1 dans le fichier  
    dd code+data1+data2              ;adresse des data 2 dans le fichier
    dd code+data1+data2+data3        ;adresse des data 3 dans le fichier
    dd code+data1+data2+data3+data4  ;adresse des data 4 dans le fichier
     
    dd data2                         ;taille du segment de donnée 1 dans le fichier
    dd data3                         ;taille du segment de donnée 2 dans le fichier 
    dd data4                         ;taille du segment de donnée 3 dans le fichier 
    dd findata                       ;taille du segment de donnée 4 dans le fichier
     
    dd 0                             ;octets supplémentaire du segment de données 1 
    dd 0                             ;octets supplémentaire du segment de données 2
    dd 0                             ;octets supplémentaire du segment de données 3
    dd 0                             ;octets supplémentaire du segment de données 4
     
     
    ;selecteur de segment de la LDT de la tache
    sel_pile equ 04h                
    sel_code equ 0Ch
    sel_dat1 equ 14h
    sel_dat2 equ 1Ch
    sel_dat3 equ 24h
    sel_dat4 equ 2Ch
    le tout en compilant avec fasm sous un format binaire brut, n'y as t'il pas un moyen dans les autres langage de compiler un fichier executable de la même manière?

  9. #9
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 452
    Points : 43 103
    Points
    43 103
    Par défaut
    Cela va dépendre du compilateur que tu utilises.

    Avec gcc tu peux effectuer cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    gcc -c code.c
    objcopy -O binary code.o fichier_binaire
    Il y a peut-être un paramètre à passer à gcc pour le faire directement.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  10. #10
    Membre confirmé Avatar de bifur
    passe le balais et l'aspirateur
    Inscrit en
    Mars 2008
    Messages
    314
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : passe le balais et l'aspirateur

    Informations forums :
    Inscription : Mars 2008
    Messages : 314
    Points : 550
    Points
    550
    Par défaut
    je pense que j'ai trouvé la solution qui va me permettre de garder les avantages de mon format de fichier spéciale et pouvoir offrir un solution pour créer des programmes avec d'autres compilateurs: je vais créer un utilitaire de post-compilation pour transformer les fichier au format ELF en fichier compatible avec mon OS

    merci a vous chrtophe et manuc44 pour m'avoir aidé a trouver

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 28/07/2015, 04h24
  2. Simple Interface Graphique pour un Système d'Exploitation
    Par marwane_nano dans le forum Langages de programmation
    Réponses: 1
    Dernier message: 27/08/2010, 11h40
  3. Interface Graphique pour un Système d'exploitation
    Par marwane_nano dans le forum Autres systèmes
    Réponses: 0
    Dernier message: 26/08/2010, 22h39
  4. Réponses: 105
    Dernier message: 10/10/2009, 23h12

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