这是NASM代码,我可以确定代码是正常的
使用golink来exe可以工作
GLOBAL _echoStr
EXTERN GetStdHandle, WriteConsoleA, ExitProcess
SECTION .data
msg DB "Hello World!", 13, 10, 0
msg.len EQU $ - msg
STD_OUTPUT_HANDLE EQU -11
NULL EQU 0
SECTION .bss
dummy RESD 1
SECTION .text
_echoStr:
PUSH STD_OUTPUT_HANDLE
CALL GetStdHandle
PUSH NULL
PUSH dummy
PUSH msg.len
PUSH msg
PUSH EAX
CALL WriteConsoleA
PUSH NULL
CALL ExitProcess
这是C代码,我想也许是正常的
#include <windows.h>
extern void echoStr();
int main()
{
echoStr();
return 0;
}
接下来,我编译NASM
nasm test.asm -f win32 -o testF.o
接下来,我尝试编译C代码和NASM obj文件
gcc -o main test.c testF.o
错误消息是
C:\C>gcc -o main test.c testF.o
testF.o:test.asm:(.text+0x3): undefined reference to `GetStdHandle'
testF.o:test.asm:(.text+0x17): undefined reference to `WriteConsoleA'
testF.o:test.asm:(.text+0x1e): undefined reference to `ExitProcess'
collect2.exe: error: ld returned 1 exit status
我不明白ld应该链接kernel32.dll
我失去了哪些步骤?