2017-08-14 5 views
1

du tutoriel nasm here Je suis le code suivant pour un programme de montage:Impossible de lier nasm assemblage avec fonction libc (nécessite reloc de R_X86_64_PC32 dynamique)

global main 
    extern puts 

    section .text 
main: 
    mov rdi, message 
    call puts 
    mov rax, 0 
    ret 
message: 
    db "Hola, mundo", 0 

J'assemblez avec nasm -felf64 hola.asm

Cependant, Je n'ai pas réussi à lier le fichier hola.o résultant.

J'ai essayé (par le tutoriel) en cours d'exécution gcc hola.o mais entraîne l'erreur suivante:

/usr/local/bin/ld: error: hola.o: requires dynamic R_X86_64_PC32 reloc against 'puts' which may overflow at runtime; recompile with -fPIC

collect2: error: ld returned 1 exit status

passant -fPIC à ne fonctionne pas, et ni ne -Wl,-I/lib/ld-2.25.so.

Mes tentatives de lier directement avec ld ont échoué, je pense que parce qu'il me manque tout ce qui définit réellement le symbole _start, ce qui entraîne une erreur de segmentation lorsque j'urne l'exécutable qui en résulte.

J'ai également essayé d'ajouter un default rel comme suggéré au nasm issue relocation R_X86_64_PC32 shared library, mais cela ne fonctionne pas non plus.

J'ai aussi essayé d'écrire la méthode principale en C, puis d'appeler une fonction qui appelle puts en assembly. Cela me donne aussi l'erreur de relocalisation dynamique.

Comment puis-je lier un fichier d'assemblage nasm afin qu'il puisse appeler une fonction dans libc sur x86_64 linux?

Répondre