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

x86 32-bits / 64-bits Assembleur Discussion :

Fichier ELF (Linux 64 bits)


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 177
    Points : 196
    Points
    196
    Par défaut Fichier ELF (Linux 64 bits)
    Bonjour,

    J'ai remarqué que dans les fichiers ELF, le début du fichier est toujours aligné sur le début d'une page. Ce qui veut dire qu'on copie souvent le header ELF (inutile à l'exécution ?) en mémoire.

    [exemple]

    readelf -l /usr/bin/man nous donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Type           Offset             VirtAddr           PhysAddr
                     FileSiz            MemSiz              Flags  Align
     
    ...
    LOAD           0x0000000000000000 0x0000000000400000 0x0000000000400000
                     0x000000000003a95c 0x000000000003a95c  R E    200000
    ...
    Comme on le remarque, il prend à partir de l'Offset (position dans le fichier) 0x0, c'est-à-dire qu'il charge en mémoire le header et tout ce qu'il y a avant le code.

    [/exemple]

    J'ai fait un « hello world » avec juste un segment (pas de section) qui marche très bien tant que j'aligne le début de fichier avec le début d'une page et ce, même si je commence à mapper après le header. Mais dès qu'on n'est plus aligné, il refuse de charger le programme en mémoire.

    Segment unique de mon « hello world » :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      Type           Offset             VirtAddr           PhysAddr
                     FileSiz            MemSiz              Flags  Align
      LOAD           0x0000000000000078 0x0000000000800078 0x0000000000000000
                     0x0000000000000045 0x0000000000000045  RWE    0
    — Je me demandais pourquoi il existait cette restriction ;
    — Je me demandais aussi d'où venait le historique 0x400000.

    Merci de vos réponses.

  2. #2
    Membre confirmé

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    377
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2009
    Messages : 377
    Points : 597
    Points
    597
    Par défaut
    Salut,

    je fais remonter ce sujet un peu vieux, mais il m'intéresse aussi...

    Pour ce qui est de l'adresse 0x80000000 :

    J'ai l'impression, mais cela reste à confirmer, que l'OS se réserve la première plage de 0x00000000 à 0x7FFFFFFF pour son fonctionnement. Mais je ne trouve rien sur notre ami google et encore moins d'information spécifique à Linux.

    Il y a cette information pour windows :

    Chaque processus qui s'exécute sur un système Windows NT a une adresse virtuelle de 4 Go comprise entre 0 x 00000000 et 0xFFFFFFFF pour son utilisation. De ce, l'adresse de 2 Go supérieur allant 0x8000000 à 0xFFFFFFFF est commune à tous les processus en cours d'exécution dans le système et elle est appelée espace d'adressage du noyau ou système. La région inférieure allant de 0 x 00000000 à 0x7FFFFFFF est appelée espace d'adressage utilisateur.
    http://support.microsoft.com/kb/189327/fr

    Pour l'alignement des pages, je dirai que cela peut venir des droits, chaque page à des droits spécifiques, si tu charges ton segment en fin de page, il est possible qu'il y ait un deuxième segment sur celle-ci, ce qui génère une erreur.

    J'ai aussi lu par ci, par là qu'il pouvait s'agir de contrainte d'optimisation de performances, mais aucune description plus approfondie.

    Quelques informations intéressante sur la pagination :
    http://fr.wikipedia.org/wiki/Paginat...e_pagin.C3.A9e

  3. #3
    Membre éclairé Avatar de messinese
    Homme Profil pro
    IT Security Consultant
    Inscrit en
    Septembre 2007
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IT Security Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 429
    Points : 876
    Points
    876
    Par défaut
    Citation Envoyé par manticore Voir le message
    Salut,

    Pour ce qui est de l'adresse 0x80000000 :

    J'ai l'impression, mais cela reste à confirmer, que l'OS se réserve la première plage de 0x00000000 à 0x7FFFFFFF pour son fonctionnement.
    Salut , on est pas trop loin du compte.

    En fait de 0x00000000 à 0xBFFFFFFF on se situe en "userland" c'est a dire un espace mémoire dédié au mappage des processus utilisateurs.

    Au dela on se trouve donc en "kernelland" et la théoriquement on ne peut y accéder (je dis bien théoriquement ).


    Concernant le reste je ne comprend pas la questions .

    Parles-tu des headers ELF et des sections mémoires (.bss , .got , .plt) ou d'autre choses ??

  4. #4
    Membre éclairé Avatar de messinese
    Homme Profil pro
    IT Security Consultant
    Inscrit en
    Septembre 2007
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IT Security Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 429
    Points : 876
    Points
    876
    Par défaut
    j'ajouterai un lien afin de compléter mon post précédent, il s'agit du manpage de ELF ou l'on retrouve tout les headers ELf et leur fonctions en détail.

    Have fun

  5. #5
    Membre confirmé

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    377
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2009
    Messages : 377
    Points : 597
    Points
    597
    Par défaut
    La seconde question concerne l'alignement des segments. On charge toujours un segment au début d'une page, avec des espaces vide entre deux segments.

    D'où viennent ces contraintes d'alignement ? J'ai lu qu'il s'agissait de contrainte d'optimisation, mais j'avoue avoir du mal à comprendre comment, le fais de laisser des espaces vides (donc du gaspillage de mémoire vive), optimise l'exécution.

Discussions similaires

  1. Fichier executable linux
    Par DiGiTAL_MiDWAY dans le forum Déploiement/Installation
    Réponses: 8
    Dernier message: 14/03/2005, 23h06
  2. Exclusivité sur un fichier sous linux
    Par ggnore dans le forum Administration système
    Réponses: 4
    Dernier message: 03/11/2004, 09h46
  3. Un peu de lumière sur l'arborescence des fichiers de Linux
    Par Noki dans le forum Administration système
    Réponses: 6
    Dernier message: 07/04/2004, 16h16
  4. Les fichiers sous linux/windows
    Par Stessy dans le forum Linux
    Réponses: 5
    Dernier message: 05/12/2003, 09h30
  5. [TP]Editeur de fichiers HLP compatibles 16 bits
    Par Alcatîz dans le forum Turbo Pascal
    Réponses: 3
    Dernier message: 08/07/2003, 21h03

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