web-dev-qa-db-fra.com

gcc -Hello.s Problème

Mon système est Ubuntu 18.04 64bit.avec build-essentials et devtools installés.

Bonjour, j'ai un fichier d'assemblage appelé Hello.s Voici son contenu:

        #This is a simple "Hello World!" program
    .section    .rodata #read only data section
str:    .string "Hello World!\n"
    ########
    .text   #the beginnig of the code
.globl  main    #the label "main" is used to state the initial point of this program
    .type   main, @function # the label "main" representing the beginning of a function
main:   # the main function:
    pushq   %rbp        #save the old frame pointer
    movq    %rsp,   %rbp    #create the new frame pointer

    movq    $str,%rdi   #the string is the only paramter passed to the printf function (remember- first parameter goes in %rdi).
    movq    $0,%rax
    call    printf      #calling to printf AFTER we passed its parameters.

    #return from printf:
    movq    $0, %rax    #return value is zero (just like in c - we tell the OS that this program finished seccessfully)
    movq    %rbp, %rsp  #restore the old stack pointer - release all used memory.
    popq    %rbp        #restore old frame pointer (the caller function frame)
    ret         #return to caller function (OS)

Essayer de le compiler avec gcc -Hello.s renvoie le message suivant:

/usr/bin/ld: /tmp/ccY9hdWi.o: relocation R_X86_64_32S against `.rodata' can not be used when making a PIE object; recompile with -fPIC

/ usr/bin/ld: échec final de la liaison: section non représentable sur la collecte 2 en sortie: erreur: ld a renvoyé 1 état de sortie

Essayé gcc -fPIC Bonjour.s qui n'a aucun effet - apporte le même message.

Certaines personnes m'ont dit d'installer gcc-4.8, cela n'a pas fonctionné

L’installation d’une version antérieure d’ubuntu a également été proposée. C’est le dernier recours à mon avis.

Aucune suggestion?

1
Little Y

Pour toute personne intéressée. (Pas si simple pour les débutants comme moi :)) On peut choisir entre les compilateurs! alors:

gcc-4.8 Hello.s

est la réponse.

0
Little Y