在NASM导入不起作用?

时间:2013-02-15 20:37:16

标签: windows import nasm

我正在尝试在Windows 7(使用NASM)上编译以下代码:

[BITS 32]

extern ExitProcess
import ExitProcess kernel32.dll
extern MessageBoxA
import MessageBoxA user32.dll

segment .data use32
Caption db 'Caption Text',0
Text db "My MessageBox Text.",0

segment .code use32
..start:
push dword 0
push dword Caption
push dword Text
push dword 0
call [MessageBoxA]

push dword 0
call [ExitProcess]

为了编译它,我尝试了nasm -o test.o test.asm,但后来说:

test.asm:4: error: parser: instruction expected
test.asm:6: error: symbol `import' redefined
test.asm:6: error: parser: instruction expected

为什么不起作用?

编辑:好的。简单的错误... nasm -o test.o -f obj test.asm有效...

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分:-2)

你不应该使用Obj。这适用于DOS而不是Windows。是的,您可以在ASM代码中使用大量编译器指令使其在Windows中运行,但如果使用Win32类型进行编译,则最终会得到专门用于Windows的代码。不幸的是,编写NASM的人会以这样的方式对其进行处理,即导入在Win32模式下不起作用(即使它应该是导入是非常标准的,并且需要在Windows中工作)。甚至更不幸的是,编写NASM的人似乎已经停止添加/改进/升级程序,并且基本上已经放弃了该项目。由于社区没有办法修复这个错误(NASM的源代码不公开),这给我们留下了一个非常缺陷的产品!