错误编译asm二进制格式不支持任何特殊符号类型

时间:2014-03-25 12:16:41

标签: assembly compilation nasm

当编译所有我的.S时,我在任何地方都有这个错误: “二进制格式不支持任何特殊符号类型”

在此代码中

    [BITS 64]

        global strcspn:function
        section .text

strcspn:
        push    rbp
        mov     rbp, rsp
        mov     r8, 0

.while:
        cmp     byte[rdi + r8], 0
        je      .goodEnd
        mov     r9, 0
        jmp     .check
.incr:
        inc     r8
        jmp     .while

.check:
        cmp     byte[rsi + r9], 0
        je      .incr
        cmp     byte[rdi + r8], byte[rsi + r9]
        je      .goodEnd
        inc     r9
        jmp     .check

.goodEnd:
        mov     rax, [r8 - 1]
        leave
        ret

1 个答案:

答案 0 :(得分:2)

看起来像是nasm代码(请在下次添加标记),您可能忘记指定输出格式-f elf64,因此它默认为二进制,它不支持:function符号类型(你无论如何都不需要)。请注意,您至少也需要修复cmp byte[rdi + r8], byte[rsi + r9],因为cmp不接受两个内存引用。此外mov rax, [r8 - 1]看起来非常可疑。