nasm
とalink
の組み合わせでkernel32.libとuser32.libをリンクするにはどうすればよいですか?私は、アセンブリプログラミング上のいくつかのチュートリアルを以下だし、ガイドは、私は、以下のコマンドを実行したい`nasm`と` alink`の組み合わせを使ってkernel32.libとuser32.libをリンクするには?
:予想通り
nasm -fobj hello.asm
alink -oPE hello \lib\kernel32.lib \lib\user32.lib
最初のコマンドが実行される、しかし、2番目のコマンドは失敗します。 .libファイルをリンクし
、私は私の現在のフォルダに
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib
からそれらをコピーしました。
2番目のコマンドを実行するときに私が取得エラーメッセージは次のとおりです。
1)てKernel32.libとuser32.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
、私は2つの質問をしましたか?
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
正しいフォルダからLIBファイルを取得していますが、本当に別の場所にコピーしないでください。リンカーにパスを渡すだけでそれを見つけることができます。そうでなければ、私はあなたの問題は、ALINKが64ビットの実行可能ファイルの生成をサポートしていないことを推測します。 32ビットオブジェクトコードを生成するか、別のリンカーを使用する必要があります。 –
32ビットまたは64ビットのコードをコンパイル/リンクしますか? MessageBoxAとExitProcessをasmファイルで宣言する方法は? – RbMm
私の意図は、32ビットコードをコンパイル/リンクすることです。私は上記の完全なサンプルを追加しました。 – Shuzheng