如上所述,我试图在另一个中重新使用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上。
我怎么能编译使用它们?
答案 0 :(得分:0)
使用nasm,您需要将来自其他翻译单元的符号声明为extern
或汇编程序抱怨。有关详细信息,请阅读documentation。
对于您的问题,请写
extern strstr
在strpbrk.asm
中告诉nasm strstr
是外部提供的符号。