Łączenie do Kernel32.lib w asemblerze

Zacząłem się uczyć montażu dzisiaj i przeprowadziłem wiele testów na Linuksie, które działały bardzo dobrze! Przeniosłem się do mojego komputera i zacząłem próbować napisać tutaj. Wystąpił problem przy próbie wywołania funkcji zewnętrznych (które znowu działały dobrze na Linuksie), gdzie dostałbym LINK 2001 Nierozwiązane błędy zewnętrzne, mówiąc mi, że WriteConsoleA nie jest zdefiniowany po kompilacji z nasm:

nasm -f win32 test.asm -o test.obj

iz cl.exe:

cl test.obj /link libcmt.lib kernel32.lib

Dostaję te błędy:

test.obj : error LNK2001: unresolved external symbol ExitProcess
test.obj : error LNK2001: unresolved external symbol GetStdHandle
test.obj : error LNK2001: unresolved external symbol WriteConsoleA
test.exe : fatal error LNK1120: 3 unresolved externals

Zespół:

extern ExitProcess, GetStdHandle, WriteConsoleA
NULL equ 0
STD_OUTPUT_HANDLE equ -11
section .data
   msg db "Hello world!",0xa
msgLen equ $-msg
section .bss
    dummy resd 1
section .text
    global _main
_main:
    push STD_OUTPUT_HANDLE
    call GetStdHandle
    push NULL
    push dummy
    push msgLen
    push msg
    push eax
    call WriteConsoleA
    push NULL
    call ExitProcess

Skopiowano prawie dokładnie ztutaj. Każda pomoc jest bardzo ceniona! Dzięki!

questionAnswers(1)

yourAnswerToTheQuestion