nasm win32编程“未定义引用...”

时间:2014-02-04 12:14:48

标签: windows winapi assembly mingw nasm

我正在尝试在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'

1 个答案:

答案 0 :(得分:2)

Win32 API使用stdcall calling convention,这意味着被调用者负责清理堆栈。因此,您不应该自己这样做(即在致电add esp, 12后不应该CopyFileA)。

stdcall调用约定的另一个影响是函数名是装饰,带有@ - 符号,后跟函数参数的大小(以字节为单位) _WinMain@16)。 CopyFile function接受3个参数,每个参数4个字节(总共12个字节),因此您应该将其称为(_CopyFileA@12)。

最后,您应该通过调用ExitProcess结束Windows应用程序。