我有来自kernel32.dll的导入GetStdHandle函数的问题,当我尝试链接我的应用程序时收到该错误:
winapiwrite.obj:winapiwrite.asm:(.text+0x7): undefined reference to `GetStdHandle@4'
我的应用代码:
;winapiwrite.asm
;
;Command line
;nasm -f win32 winapiwrite.asm
;ld winapiwrite.obj -o winapiwrite.exe c:\windows\system32\kernel32.dll
[bits 32]
extern _ExitProcess@4
extern _GetStdHandle@4
extern _WriteConsoleA@20
global _WinMain@16
section .data
str_hello:
db "Hello world!", 0 ;length = 12bytes
section .text
_WinMain@16:
;stack frame
push ebp
sub esp, 4
;GetStdHandle( -11 ): stdoutput
push -11
call _GetStdHandle@4
mov ebx, eax
;WriteConsoleA( Output, &text, len, &bytes, reserved )
push 0
lea eax, [ebp-4]
push eax
push 12
push str_hello
push ebx
call _WriteConsoleA@20
;ExitProcess( 0 )
push 0
call _ExitProcess@4
;END OF _WinMain@16
当我在代码中更改函数名称时,附加:
_GetStdHandle@4
为:
_GetStdHandle
我收到了这个错误:
ertr000006.o:(.rdata+0x0): undefined reference to `_pei386_runtime_relocator'
我不知道什么ExitProcess和WriteConsoleA导入没有问题,而GetStdHandle是问题,我从几个小时开始考虑这个问题,我没有任何解决方案。
感谢您的帮助。
答案 0 :(得分:2)
[溶液]
我的电脑中的kernel32.lib有问题。我下载了另一个kernel32.lib,并且没有链接器问题。