2

我正在尝试在 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有效...

4

2 回答 2

3

似乎是一个已知问题。http://cboard.cprogramming.com/windows-programming/114989-nasm-import-directive-failing-expected-instruction-error.html中建议的分辨率

于 2013-02-15T20:53:59.720 回答
-2

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

于 2015-03-20T13:16:03.730 回答