読者です 読者をやめる 読者になる 読者になる

機械語初心者がアセンブラを作ってみる

機械語初心者がアセンブラを作ってみるだけのブログです。ひつまぶしひつまぶし

第1回 ml64.exeとdumpbin.exeを使ってみた

まず、今回は

機械語解析の手始めに

ml64.exeアセンブルした実行ファイルを作ってみます!

 

なぜ勉強用の実行ファイルをC言語コンパイラで作らないかというと

アセンブラで作ったほうがシンプルな機械語になると思って。。

というかコンパイラなんかで作ったら

後で調べる時にアセンブリの意味が分かんなくなっちゃうというか。。

 

にゃはー

 

ずーっと前にどこからかDLしてきたアセンブラを使います。

昔すぎてどこからDLしたか忘れましたが、

フォルダ名は「C:\Program Files (x86)\Windows Kit\8.0」でした。

 

それからVisual Studioも必要かなー。

Expressでいいです。というか僕Express使ってます。

VSのバージョンは11.0です。

 

んでんで

適当なフォルダを新しく作って

そこにバッチファイルを作って

以下のコードを書き込みます。

64ビット専用のバッチファイルが生まれます♪

 

@path %path%;C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\x86_amd64;C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin;C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE;

@set LIB=%LIB%;C:\Program Files (x86)\Windows Kits\8.0\Lib\win8\um\x64;C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib\amd64

@set INCLUDE=%INCLUDE%;C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include

@cmd

 

ダブルクリックコマンドプロンプトが起動します。

あ、うちのパソコンWin7ね。

ここでダブルクリックしたやつでないとアセンブルできない。

 

; サンプル 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(新しい関数呼び出し規約)

; 引数はrcxrdxr8r9r10r11

; 戻り値はrax

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

 

32ビットプログラムの関数呼び出し規約がSTDCALLっていうのは

既知の事実だと思うんですが

64ビットではFASTCALLってのを使うみたい。

簡単な仕様は上のコメントに書いてるとおり。

 

アセンブリ一番最初に著作権表記があるんですが

そこから借りてきたコードを載せていたブログがどっかにあったので

そこから転載してちょこっと付け足してきました。

 

ずっと前に作ったアセンブリなので

どこから落としてきたかも覚えてません。ごめんね

 

ml64 test64.asm /link /subsystem:console /entry:Start

 

で、アセンブルです。

疲れた。

 

細かいコマンドラインとかの説明はMSDNに丸投げするとして

(コマンドラインで /? オプションをつけたら説明が見られる)

 

次はdumpbin.exeを使ってみます。

このdumpbin.exeっていうのが

 

dumpbin /DISASM /ALL /OUT:test64.txt test64.exe

 

で呼び出せます。

dumpbin.exeっていうのは、逆アセンブルしたり機械語を翻訳してくれたり、万能なツールなわけで。

 

万能じゃない?お前居残り!

 

で、これから機械語の解析をするわけですが、資料がほとんどないという状況なので、

dumpbin.exeはこれからの僕にとって

全自動答え合わせ機

になっちゃう

という悲しい側面を持ち合わせています。

 

dumpbin.exeがないと何もできない(´・ω・`)

 

 

※修正(23時29分) バッチファイルのLIBを修正(cl.exeで64bitアプリが作成できない問題があったため)

※修正(23時34分) バッチファイルのINCLUDEを修正(11.0ではなくなぜか10.0のフォルダからINCLUDEしていたため)