Łą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!