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

Error calling standard C library functions from NASM?

我对汇编编程还很陌生。我在 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 link 它时,我不断收到错误。我试过的一些东西:

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

  2. ld file.obj(给出错误 undefined reference to puts)。

谁能指导我如何解决这个问题?

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

[BITS 32]

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

你可以用不同的方式编译,比如:

  • 为您的 .asm 文件创建一个对象:

    1. 海湾合作委员会:nasm -f elf file.asm
    2. LD: ld -m elf_i386 file.o -o file

  • Link 使用 gcc -m32 -o file file.o 创建的目标文件
  • 运行 与 ./file