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 :

[NASM] Problème d'édition de liens


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2004
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Mai 2004
    Messages : 46
    Points : 28
    Points
    28
    Par défaut [NASM] Problème d'édition de liens
    Bonsoir,

    Je débute en Assembleur. J'essaie actuellement de faire fonctionner un programme des plus simples sur mon portable mac ayant un processeur Intel core2duo.

    Le but de mon programme est de réaliser l'opération suivante :

    8+5+3*2
    Le code que j'ai écrit :

    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
    global _start
     
    section .data
     
    section .text
    	_start:	
                    mov al,2
    		mov ah,3
    		mul ah
    		add ax,8
    		add ax,5
    		mov eax,1 
    		mov ebx,0
    		int 0x80
    		trap
    Je compile donc avec la commande suivante :

    nasm -f elf premier.asm
    Jusque là tout ce passe bien, par contre dès que je veux réaliser l'édition de lien via la commande suivante :

    ld -o premier premier.o
    J'obtiens l'erreur suivante :

    ld: warning -arch not specified
    ld: warning in premier.o, file is not of required architecture
    ld: could not find entry point "start" (perhaps missing crt1.o) for inferred architecture i386
    Apparemment il faudrait donc passer l'architecture utilisée par mon ordinateur via le paramètre "-archi". J'ai regardé un petit peu la documentation de ld, malheureusement je ne sais pas du tout quoi indiquer.
    De plus pourquoi est-il écrit que le point d'entré start n'a pas été trouvé ?

    Quelqu'un saurait-il m'expliquer ce qu'il faut faire ?

    J'ai également deux trois petites questions à propos de l'assembleur NASM :
    - La section .data doit elle toujours être spécifié même si on l'utilise pas ?
    - Le TRAP du label __start est t'il obligatoire ou peut-on s'en passer ?

    Merci.

    Cordialement,
    Laurent

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2004
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Mai 2004
    Messages : 46
    Points : 28
    Points
    28
    Par défaut
    Personne ne peut m'aider ?

  3. #3
    Membre confirmé Avatar de dapounet
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 469
    Points : 567
    Points
    567
    Par défaut
    Salut,
    Pourquoi est-ce que tu utilises ld pour éditer les liens, c'est obligé ?
    :wq

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2004
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Mai 2004
    Messages : 46
    Points : 28
    Points
    28
    Par défaut
    Citation Envoyé par dapounet Voir le message
    Salut,
    Pourquoi est-ce que tu utilises ld pour éditer les liens, c'est obligé ?
    Je suis pas du tout obligé.
    En fait je débute et on m'a expliqué en utilisant ld, seulement ça ne veut pas fonctionner. Je suis preneur de toute solution que je pourrais comprendre et qui fonctionne

  5. #5
    Membre confirmé Avatar de dapounet
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 469
    Points : 567
    Points
    567
    Par défaut
    Essaie toujours ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nasm -f elf -o premier premier.asm
    :wq

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2004
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Mai 2004
    Messages : 46
    Points : 28
    Points
    28
    Par défaut
    Merci bien, ça me cré effectivement un executable. Cependant si j'essai de l'executer j'otiens le message suivant :

    -bash: ./premier: cannot execute binary file
    Je dispose pourtant des droits suffisants, etc.
    Bref je comprends pas ?

  7. #7
    Membre confirmé Avatar de dapounet
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 469
    Points : 567
    Points
    567
    Par défaut
    Ah ben apparemment NASM ne peut pas faire de fichier exécutable, ça explique pourquoi ça ne marchait pas chez moi non plus et pourquoi tout le monde utilise ld pour linker.
    Pour utiliser MASM et MinGW sous Windows je fais un point d'entrée en C :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    void start (void);
     
    int main (void)
    {
       start();
       return 0;
    }
    Puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc essai.c asm.o -o start
    Pour être tranquille ajoute pushad au début de ton code assembleur et popad à la fin.

    Citation Envoyé par Ouaibou Voir le message
    - La section .data doit elle toujours être spécifié même si on l'utilise pas ?
    Essaie, comme ça tu sauras.

    Citation Envoyé par Ouaibou Voir le message
    - Le TRAP du label __start est t'il obligatoire ou peut-on s'en passer ?
    Normalement un ret et c'est bon, mais je ne sais pas à quoi trap sert, peut-être à marquer la fin du point d'entrée ?
    :wq

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2004
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Mai 2004
    Messages : 46
    Points : 28
    Points
    28
    Par défaut
    Encore merci pour ta réponse.

    Je viens d'installer nasm sur un ancien pc de bureau tournant sous unix avec un processeur AMD. La compilation et l'edition des liens fonctionne parfaitement. Par contre le programme ALD qu'on m'a fourni pour permettre de voir le contenu de la mémoire, etc. ne veut pas se lancer.

    Bref c'est vraiment pas marrant tout ça. Je vais essayé de voir sur mon mac si en utilisant un point d'entré comme tu m'as indiqué ça fonctionne.

    Le TRAP sert à indiquer qu'on sort d'une sous routine donc apparemment, pour me répondre , il n'est pas obligatoire dans mon petit programme.

    Pour ce qui est du .data j'ai essayé avec et sans, et ça semble fonctionner.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 47
    Points : 46
    Points
    46
    Par défaut
    Pour linké sous win j'utilise alink qui a justement une option -entry
    ld en possede une -e ou --entry, par contre j'ai jamais essayé donc a toi de voir
    si sa t'evite le "ld: could not find entry point "start""

Discussions similaires

  1. [MASM32] Problème à l'édition de liens
    Par theShin dans le forum x86 32-bits / 64-bits
    Réponses: 4
    Dernier message: 01/03/2007, 21h38
  2. Problème d'édition de lien
    Par Kodamas dans le forum Autres éditeurs
    Réponses: 10
    Dernier message: 05/06/2006, 13h50
  3. [g++] Problème d'édition de liens
    Par glKabuto dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 31/05/2006, 19h10
  4. [Dev-C++] Problème d'édition des liens
    Par shura dans le forum EDI
    Réponses: 5
    Dernier message: 30/08/2005, 09h35
  5. Problème à l'édition des liens avec BCC55 et Xerces
    Par ShootDX dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 30/11/2003, 14h50

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