从NASM调用标准C库函数时出错?

时间:2017-05-09 19:39:46

标签: gcc assembly x86 nasm ld

我对汇编编程很新。我在Windows 7(64位)平台上使用NASM 2.11.05来运行一些示例代码。当我尝试从汇编代码调用标准C函数时出现问题。这是我的汇编来源:

global  main
        extern  puts

        section .text
main:                                   
        push    message            
        call    puts                    
        ret                             
message:
        db      "Hola, mundo", 0 

当我使用NASM编译时,我使用以下命令行:nasm -fwin32 file.asm 它产生file.obj。现在,当我尝试将其与ld或gcc链接时,我不断收到错误。我试过的一些事情:

  1. gcc -m32 -nostartfiles file.obj(给出错误,i386:输入文件的x86-64架构与i386输出不兼容)。

  2. ld file.obj(给出对puts的错误未定义引用)。

  3. 任何人都可以指导我如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

最后,我的ASM文件顶部的一行确定了它。这就是那条线。

[BITS 32]

但是,输出文件仍然会崩溃:任何可以解释的人都欢迎!

答案 1 :(得分:0)

您可以以不同的方式编译,例如:

  • 使用以下代码创建.asm文件的对象:

    1. GCC:nasm -f elf file.asm
    2. LD:ld -m elf_i386 file.o -o file
    3. 使用gcc -m32 -o file file.o创建的链接对象文件
    4. 使用./file

      运行