簡體   English   中英

nasm win32編程“未定義的引用……”

[英]nasm win32 programming “undefined reference to…”

我正在嘗試在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

我正在嘗試在winbase.h使用CopyFileA函數

組裝工作正常

nasm -f win32 copy.asm

ld失敗

ld file.obj -lkernel32

它說,

undefined reference to `CopyFileA'

Win32 API使用stdcall調用約定 ,這意味着被調用方負責清理堆棧。 因此,您不應該自己執行此操作(即在調用CopyFileA之后不應該add esp, 12 )。

stdcall調用約定的另一個效果是,函數名稱用@ -sign 修飾 ,后跟函數參數的大小(以字節為單位)(如_WinMain@16 )。 CopyFile函數接受3個參數,每個參數4個字節(總共12個字節),因此您應將其稱為( _CopyFileA@12 )。

最后,您應該通過調用ExitProcess結束Windows應用程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM