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 / Linux] Problème de linkage avec lib C


Sujet :

x86 32-bits / 64-bits Assembleur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de donkeyquote
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 195
    Par défaut [NASM / Linux] Problème de linkage avec lib C
    Bonjour,

    J'ai compile le code suivant :
    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
     
    ;importing exter C symbol
    extern _printf
    ;declarating variables
    section .data
    ;filling the variable
    hello: db 'Hello World', 10, 0
    ;entry point for main function
    global _main
    ;start assembly program
    section .text
    ;coding the _main symbol
    _main:
    ;pushing the hello variable on the stack
    push hello
    ;calling the _printf C function
    call _printf
    ;cleaning the stack by unstacking the hello variable on the EAX register
    pop EAX
    ;exiting from _main symbol
    ret
    Afin de pratiquer l'inclusion de symbols C dans le code assembleur.

    Pour compiler (je travaille sous Linux) j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    nasm -f elf -o hello.o hello.asm
    Et tout parait bien marcher...

    J'ai regarde sur internet pour pouvoir linker ca a la lib de C et j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ld -o hello -lc hello.o
    La reponse que j'obtient est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ld: warning: cannot find entry symbol _start; defaulting to 0000000008048100
    hello.o: In function `_main':
    hello.asm:(.text+0x6): undefined reference to `_printf'
    Comment resoudre ca ?

    Merci d'avance.

  2. #2
    Membre chevronné 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
    Par défaut
    Bonjour,

    Sous Linux les identifiants ne sont pas préfixés par '_'. Essaie sans, ça marche chez moi.
    Je te conseille d'appeler simplement gcc pour linker :
    Il se chargera d'appeler le linker ld en passant les arguments qui dépendent de la plateforme (tu peux voir les détails avec l'option -v).

  3. #3
    Membre confirmé Avatar de donkeyquote
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 195
    Par défaut
    Ok merci Dapounet !

    Ca a marche.

    Un tutoriel pour debutants pour assembleur x86 (sous Linux) qui soit bien et super clair ?

  4. #4
    Membre chevronné 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

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

Discussions similaires

  1. Problème de linkage avec la lib regex
    Par lovecpp dans le forum Boost
    Réponses: 7
    Dernier message: 22/09/2010, 13h40
  2. [linux] problème d'inclusion avec gcc
    Par wtfu dans le forum C
    Réponses: 3
    Dernier message: 12/07/2006, 14h49
  3. Code::Blocks sous Linux problème de linkage
    Par Invité dans le forum Code::Blocks
    Réponses: 3
    Dernier message: 22/03/2006, 16h54
  4. [Code::Blocks] Problème de linkage: "msvcrt.lib"
    Par skhay dans le forum Code::Blocks
    Réponses: 8
    Dernier message: 14/03/2006, 19h39
  5. Problème de linkage avec la librairie DevIl
    Par Drannor dans le forum DevIL
    Réponses: 1
    Dernier message: 18/01/2006, 23h05

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