ld:非法文本重定位(使用nasm组装的目标文件)

时间:2018-11-02 19:17:09

标签: assembly nasm x86-64 ld dylib

我试图从用NASM组装的对象文件创建dylib,但是出现以下错误:

  

ld:对于架构x86_64,从object / ft_puts.o的'_ft_puts'非法将文本从Objects / ft_puts.o重定向至'newline

这是我的ft_puts.s

SYS_WRITE   equ 0x2000004
STDOUT      equ 1

section .data
    newline db 10

section .text
    global _ft_puts

_ft_puts:
    push rbp
    mov rbp, rsp
    mov rdx, rdi ; save address of str to print

    ; calculate len of string pointed by rdi
    mov rcx, -1
    xor rax, rax
    repnz scasb
    not rcx
    push rcx ; save string length (+1 for the '\n' to add)
    dec rcx
    ; print the string
    mov rax, SYS_WRITE
    mov rdi, STDOUT
    mov rsi, rdx
    mov rdx, rcx
    syscall
    ; print the \n
    mov rax, SYS_WRITE
    mov rsi, newline
    mov rdx, 1
    syscall

    pop rax
return:
    pop rbp
    ret

这是我的makefile:

$(LIB): $(OBJECTS)
    gcc -dynamiclib -o $@ $(addprefix $(OBJECTS_D), $^)
    # ranlib $@

%.o: $(SOURCES_D)%.s
    $(NASM) $^ -o $(OBJECTS_D)$@

我在macOS Sierra 10.12.6,NASM版本2.13.03中。
我不知道如何解决该问题,因此如果有人可以提供帮助,并解释该错误的出处? 谢谢。

0 个答案:

没有答案