如何使用nasm
和alink
的组合链接kernel32.lib和user32.lib?
我正在学习有关汇编编程的一些教程,指南要求我执行以下命令:
nasm -fobj hello.asm
alink -oPE hello \lib\kernel32.lib \lib\user32.lib
第一个命令按预期执行,但第二个命令失败。
要链接.lib文件,我已将其从
复制C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib
进入我当前的文件夹。
执行第二个命令时收到的错误消息是:
Loading file hello.obj
Loading file Kernel32.lib
2327 symbols
Loaded first linker member
Loading file User32.lib
1385 symbols
Loaded first linker member
matched Externs
matched ComDefs
Unresolved external MessageBoxA
Unresolved external ExitProcess
现在,我有两个问题:
1)kernel32.lib和user32.lib在哪里?
2)如何正确链接这些库文件?
操作系统是Windows 10(64位)。
更新
; Coded for NASM ;
; nasm -fobj hello.asm ;
; alink -oPE hello \lib\kernel32.lib \lib\user32.lib ;
;
extern MessageBoxA ; APIs used ;
extern ExitProcess ; in this file ;
;
[SECTION CODE USE32 CLASS=CODE] ; code section ;
..start: ; for the linker ;
;
push byte 0 ; only the buttons 'OK' ;
push dword caption ; caption of the BOX ;
push dword text ; text in the BOX ;
push byte 0 ; handle of the Box ;
call MessageBoxA ; print BOX on screen ;
;
push byte 0 ; ;
call ExitProcess ; EXIT ;
;
caption db "Your first WIN32 programm",0 ;
text db "HELLO",0 ;
;
end ; for the linker
答案 0 :(得分:1)
我没有'找到了kernel.lib
或user.lib
可供ALINK
使用的ALINK
或WIN32.LIB
。这可能是由于所需的.obj文件的格式,而大多数Windows .obj的格式为COFF MessageBoxA
希望与OMF一起使用。
合适的ExitProcess
是here。它包括RET
但不包括; Import the needed Win32 API functions.- http://www.nasm.us/doc/nasmdoc7.html#section-7.4.4
IMPORT ExitProcess kernel32.dll
IMPORT MessageBoxA user32.dll
; Still needed to be declared as external
EXTERN ExitProcess, MessageBoxA
[SECTION CODE USE32 CLASS=CODE] ; code section
..start:
push 0 ; only the buttons 'OK'
push dword caption ; caption of the BOX
push dword text ; text in the BOX
push 0 ; handle of the Box
call [MessageBoxA] ; print BOX on screen
push 0
call [ExitProcess]
caption db "Your first WIN32 programm",0
text db "HELLO",0
。建议不要使用简单的word_vector = Embedding(input_dim=2000,output_dim=100)(word_one_hot)
终止纯Windows程序。
然而,如果不是更好的话,NASM也可以做到这一点:
path: '/user/page_type
请注意,调用时功能用括号括起来。此外,将变量放在单独的DATA部分中会更好。
如果你计划一个包含来自一堆.DLL的大量IMPORT的大型项目,请查看NASMX Project。