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



我对汇编编程很陌生。我在 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 (给出错误未定义的 put 引用(。

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

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

[BITS 32]

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

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

  • 使用以下命令创建.asm文件的对象:
    1. 海湾合作委员会:nasm -f elf file.asm
    2. LD: ld -m elf_i386 file.o -o file

  • 使用 gcc -m32 -o file file.o 创建的链接对象文件
  • ./file一起运行
  • 最新更新