尝试在另一个中使用asm函数,同时使用nasm编译lib.so

时间:2018-04-15 15:05:09

标签: assembly 64-bit nasm

如上所述,我试图在另一个中重新使用asm函数,同时在libasm.so中编译它们。 基本上,这就是我正在做的事情:

    strpbrk:

    init:  
    push rbp
    mov rbp, rsp
    mov r9, rdi
    mov r10, rsi
    mov rdx, -1
    loop:
    mov rbx, r9
    inc rdx
    add rbx, rdx
    movzx ebx, BYTE[rbx]

    mov [buf], ebx
    movzx rsi, WORD[buf]
    mov rdi, r10
    call strstr
    cmp rax, 0
    jne end

    cmp bl, 0
    jne loop

    end:
    leave
    ret

    SECTION .data

    buf db 0, 0

这是错误:

    nasm -f elf64 src/strstr.asm -o src/strstr.o
    nasm -f elf64 src/strpbrk.asm -o src/strpbrk.o
    src/strpbrk.asm:23: error: symbol `strstr' undefined
    make: *** [Makefile:28: src/strpbrk.o] Error 1

考虑到我正在尝试调用的strstr函数,并且在同一个makefile上。

我怎么能编译使用它们?

1 个答案:

答案 0 :(得分:0)

使用nasm,您需要将来自其他翻译单元的符号声明为extern或汇编程序抱怨。有关详细信息,请阅读documentation

对于您的问题,请写

extern strstr
strpbrk.asm

告诉nasm strstr是外部提供的符号。