アセンブラ Feed

2016年3月26日 (土)

mllink$ 「64bit アセンブラに挑戦」の続き

ところで mllink$ あるいは mllink$.lnk というファイルが出来てると思います。
これはショートカットではなく ml64.exe が link.exe へオプションを渡すための
レスポンスファイルです。
エディター(メモ帳など)で開いてみると
--
/OUT:test64.exe
test64.obj
/subsystem:windows
/entry:Start
--
などとなっているのがわかります。

(ml64.exe のパス)\link.exe @mllink$.lnk

でリンクしてくれます。

あと、環境変数 LIB にライブラリのパスを設定しておけば、拡張子Lib のファイルを
コピーしてくる必要はありません。

set LIB="C:\Program Files\Microsoft SDKs\Windows\v7.1\Lib\x64"

と書いたバッチファイル(例えば setlib.bat )を用意して
実行しておけばよいでしょう。

2016年3月23日 (水)

64bit アセンブラに挑戦

私の visual studio 2010 は、以下のページを参考に

http://d.hatena.ne.jp/torutk/20100927/p1

64bit 化されているので 64bit アセンブラ(ml64.exe)がインストールされています。
それで 64bit アセンブラプログラミングに挑戦してみたくなりました。

まず、「ドキュメント ライブラリ」にフォルダ '64asm' を作り
そこにソースファイル test64.asm を以下のように作ります。
----
; サンプル x64 アセンブリー・プログラム

; Chris Lomont 2009 www.lomont.org

extrn ExitProcess: PROC ; システム・ライブラリーの外部関数

extrn MessageBoxA: PROC

includelib "user32.lib"

includelib "kernel32.lib"

.data

caption db "64びっと", 0

message db "いやっほーい", 0

.code

Start PROC

sub rsp, 28h ; シャドウ領域、スタックをアライメントする

mov rcx, 0

lea rdx, message

lea r8, caption

mov r9, 0

call MessageBoxA

mov ecx, eax

call ExitProcess

Start ENDP

End



; /entry:Start



; fastcall(新しい関数呼び出し規約)

; 引数はrcx、rdx、r8、r9、r10、r11

; 戻り値はrax

; 浮動小数点数の戻り値はxmm0

----
上のソースは
http://mbdev.hateblo.jp/entry/2013/05/14/212139
からコピーしたものです。(以下も参考にしました。)

そして同じ場所に以下の内容の 'test.bat' を作ります。(場合によってパスが違うかもしれません。)

----
"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\ml64.exe" test64.asm /link /subsystem:windows /entry:Start
----

そして「コマンドプロンプト」(windows のバージョンによって違うようなので検索してみてください。私のは windows 7 です)を立ち上げて

cd "C:\Users\[ユーザー名]\Documents\64asm"

と入力してみてください。エクスプローラーで直接辿っても構いません。
dir と入力してみて、先に作った2つのファイルがあればOKです。

そこでコマンドプロンプトから test と入力してみてください。
LINK : fatal error LNK1104: cannot open file 'user32.lib'
と user32.lib がないと怒られてしまいます。

そこで "C:\Program Files\Microsoft SDKs\Windows\v7.1\Lib\x64" から user32.lib を
64asm フォルダにコピーします。
そこでもう一度コマンドプロンプトから test と打ち込んで見てください。
今度は kernel32.lib がないと怒られてしまいます。
それでもういちど同じ場所からコピーしてきます。
そして test と入力してみてください。今度はうまくいったようです。
ためしに test64 と入力してみてください。メッセージボックスがあらわれるなら成功です。
あるいは test64.exe をクリックしてみてください。

付記:現在実行するとエラーが出るようです。目下調査中。
どうやら休止状態から復帰するとおかしくなるようです。

続きを読む »