Verknüpfen mit Kernel32.lib im Assembler

Ich habe heute angefangen, Assembler zu lernen und habe viele Tests unter Linux durchgeführt, die sehr gut funktionierten! Ich ging zu meinem PC und fing an, hier etwas zu schreiben. Beim Versuch, externe Funktionen aufzurufen (was wiederum unter Linux einwandfrei funktionierte), trat ein Problem auf, bei dem LINK 2001 Unresolved External-Fehler auftraten, die darauf hinwiesen, dass WriteConsoleA nach dem Kompilieren mit nasm nicht definiert wurde:

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

und mit cl.exe:

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

Ich erhalte diese Fehler:

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

Die Versammlung:

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

Fast genau kopiert vonHier. Jede Hilfe wird sehr geschätzt! Vielen Dank!

Antworten auf die Frage(1)

Ihre Antwort auf die Frage