我正在尝试在windows xp上的mingw32中汇编和链接一个简单的代码与nasm和ld 这是我的代码,
extern _CopyFileA
section .data
src dd 'abc.txt',0
dest dd 'xyz.txt',0
false dd 'FALSE',0
section .text
global _WinMain@16
_WinMain@16:
push src
push dest
push false
call _CopyFileA
add esp, 12
ret
我正在尝试使用CopyFileA
winbase.h
功能
组装工作正常
nasm -f win32 copy.asm
但ld
失败
ld file.obj -lkernel32
它说,
undefined reference to `CopyFileA'
答案 0 :(得分:2)
Win32 API使用stdcall
calling convention,这意味着被调用者负责清理堆栈。因此,您不应该自己这样做(即在致电add esp, 12
后不应该CopyFileA
)。
stdcall
调用约定的另一个影响是函数名是装饰,带有@
- 符号,后跟函数参数的大小(以字节为单位) _WinMain@16
)。 CopyFile
function接受3个参数,每个参数4个字节(总共12个字节),因此您应该将其称为(_CopyFileA@12
)。
最后,您应该通过调用ExitProcess
结束Windows应用程序。