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