从 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 它时,我不断收到错误。我试过的一些东西:
gcc -m32 -nostartfiles file.obj(给出输入文件的 i386:x86-64 架构与 i386 输出不兼容的错误)。
ld file.obj(给出错误 undefined reference to puts)。
谁能指导我如何解决这个问题?
最后,我的 ASM 文件顶部的一行解决了它。这就是那条线。
[BITS 32]
但是,输出文件仍然不断崩溃:欢迎任何可以解释的人!
你可以用不同的方式编译,比如:
为您的 .asm
文件创建一个对象:
- 海湾合作委员会:
nasm -f elf file.asm
或
- LD:
ld -m elf_i386 file.o -o file
Link 使用 gcc -m32 -o file file.o
创建的目标文件
运行 与 ./file
我对汇编编程还很陌生。我在 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 它时,我不断收到错误。我试过的一些东西:
gcc -m32 -nostartfiles file.obj(给出输入文件的 i386:x86-64 架构与 i386 输出不兼容的错误)。
ld file.obj(给出错误 undefined reference to puts)。
谁能指导我如何解决这个问题?
最后,我的 ASM 文件顶部的一行解决了它。这就是那条线。
[BITS 32]
但是,输出文件仍然不断崩溃:欢迎任何可以解释的人!
你可以用不同的方式编译,比如:
.asm
文件创建一个对象:
- 海湾合作委员会:
nasm -f elf file.asm
或 - LD:
ld -m elf_i386 file.o -o file
gcc -m32 -o file file.o
创建的目标文件
./file