Linux程序集 - 无法读取符号:文件格式错误

时间:2014-09-22 15:26:32

标签: assembly nasm ld

我正在尝试在linux服务器上编译asm程序。我是编写asm程序的新手,但我按照学校的教程做了他们所说的一切,但没有成功。

这是我的hello.asm文件。

    SECTION .data
msg:    db "Hello World",10
len:    equ $-msg
    SECTION .text
        global main
main:
    mov edx,len
    mov ecx,msg
    mov ebx,1
    mov eax,4
    int 0x80
    mov ebx,0
    mov eax,1
    int 0x80

我使用命令行nasm -f elf hello.asm编译此文件,该文件完全正常并生成目标文件。问题是,当我尝试ld hello.o时,它说它无法读取文件中的符号而文件格式错误。

任何人都可以帮助我并告诉我如何编译.asm文件以便它可以运行吗?

1 个答案:

答案 0 :(得分:2)

由于32位和64位混合库,我今天遇到了类似的问题(这就是为什么我碰巧遇到了你的问题)。如果您尝试链接不同类型的库,ld会抱怨。在64位系统上,ld默认为64位。

要指定类型,您应该能够为32位或ld -m elf_i386指定gcc -m32。 (或者gcc -m32 -static -nostdlib表示静态二进制文件。)

如果您的asm源代码可移植到64位,则可以使用nasm -f elf64组装为64位。但是它可以在运行时汇编但是在截断指针时出错,或者系统调用返回错误而不是工作,因为the int 0x80 ABI is purely 32-bit