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!