0

好的,所以我正在使用 NASM 组装代码并与 Golink 链接。我一直在直接通过 DLL 使用 Windows API 调用和 C 调用。例如,kernel32.dll 用于类似 ExitProcess 的东西,msvcrt.dll 用于类似 printf 的东西。但是,当我尝试使用这样的装饰时,_ExitProcess@4_printf golink 抱怨装饰并建议使用/mix标志。当我使用它时,Windows 抱怨输出文件不是有效的 win32 程序。当我不使用装饰品时,它工作得很好。谁能解释一下怎么回事?

例子:

extern printf
extern ExitProcess
;A bunch of code which isn't really important to this

然后我的命令:

nasm -fwin32 test.asm
golink test.obj kernel32.dll msvcrt.dll /console /entry _start
4

1 回答 1

1

我使用 Nasm,但不在 Windows 中,所以我对 GoLink 不是很熟悉。我认为它在内部添加了“装饰”。它可能需要前导下划线。如果您在命令行上使用“--prefix _”,Nasm 会将其添加到任何外部/全局内容中。

仔细阅读错误消息可能会让您对 GoLink 的预期有所了解。尝试直到试验>错误。:)

最好的,弗兰克

于 2012-07-28T22:36:07.727 回答