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?
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.