コンパイラ、アセンブラ、逆アセンブラ
ILコードファイル
ILのソースコード版の拡張子は「*.il」です(多分)。ILのアセンブル(ILは「コンパイル」ではない)後の形はexeやdllになります。
今のところ、ILのコードはVisual Studioでも色つけ編集をさせてもらえません。というわけでただのテキストエディタで作成します(もちろんVSとテキストエディタに使っても良いです)。そして、保存する時に「*.il」という形式で保存してあげてください。
ツールの場所
まずは環境がそろっている確認します。あなたの環境には「.Net Framework SDK」または「Visual Studio」が入っているでしょうか?・・・はい。入っているという前提で進めさせていただきます。そこをすっ飛ばしてILをするのを私はオススメしません。
すると、「スタート」から辿った先に「SDKコマンドプロンプト」なり「Visual Studio.Net ~ コマンドプロンプト」という項目があると思います。はい。操作は全てコマンドプロンプトです。
前提の知識はそんなに要求しないつもりですが、こういう事はあまり多くの人がしないためにこういう操作になってしまいます。え~と、精進です。
コンパイル
それではまず、ILコードをexeにする方法ではなくC#やVB.Netをコンパイルする方法を説明します。
I:\temp\cm>dir
ドライブ I のボリューム ラベルがありません。
ボリューム シリアル番号は C49B-DFC7 です
I:\temp\cm のディレクトリ
2006/08/06 20:34 <DIR> .
2006/08/06 20:34 <DIR> ..
2006/08/06 20:33 89 sample.cs
2006/08/06 20:34 86 sample.vb
2 個のファイル 175 バイト
2 個のディレクトリ 4,638,691,328 バイトの空き領域
I:\temp\cm>
※「\」がバックスラッシュ表示になっている方。注意。
はい、この二つをコンパイルします。コンパイルの仕方は次の通り。
C#
「csc」と呼ばれる、C#コンパイラを使います。安易なネーミングで分かり易いです。
I:\temp\cm>csc sample.cs
Microsoft(R) Visual C# .NET Compiler version 7.10.6001.4
for Microsoft(R) .NET Framework version 1.1.4322
Copyright (C) Microsoft Corporation 2001-2002. All rights reserved.
I:\temp\cm>
「csc /?」とすると、ヘルプがでます。しかも日本語で。
VB.Net
「vbc」と呼ばれる、VB.Netコンパイラを使います。こちらも安易なネーミングで分かり易いです。
I:\temp\cm>vbc sample.vb
Microsoft(R) Visual Basic .NET Compiler version 7.10.6001.4
for Microsoft(R) .NET Framework version 1.1.4322.2032
Copyright (C) Microsoft Corporation 1987-2002. All rights reserved.
I:\temp\cm>
同じく「vbc /?」とすると、ヘルプがでます。こちらも日本語。
後々、「これをやってみたいんだけどC#では書けるけどILでは書けない」という時に役に立ちます。
逆コンパイル
次は逆コンパイルです。ひねくれていますが、次に必要になるので先に説明します。逆コンパイルは次の通り。
I:\temp\cm>ildasm sample.exe
I:\temp\cm>
「ildasm」つまり、IL dasm(ILの逆アセンブラ)です。.Net系の実行ファイル又はDLLを指定してください。ウィンドウが立ち上がって親切にツリー形式で表示してくれます。
ですが、これではちょっと困ります。一続きのソースコードが欲しいです。そういう時は次のようにします。
I:\temp\cm>ildasm sample.exe /text
~~~略~~~
「/text」スイッチをつけます。ちなみに、最初の3文字で判定しているようなので「/tex」でも良いです(tex形式で出力はしてもらえませんよ)。そして、三つ目、ファイルへの出力。
I:\temp\cm>ildasm sample.exe /out=sample.il
// WARNING: Created Win32 resource file sample.res
I:\temp\cm>
「/out=ファイル名」とすると、ファイルに出力してくれます。さて、いよいよILコードのアセンブルが出来ます。
アセンブル
- アセンブリ言語・・・言語の事
- アセンブリ・・・アセンブリ言語で書かれたコードの事
- アセンブル・・・アセンブリを機械語(今回は.NetのILバイナリ)にする事
- アセンブラ・・・アセンブルするプログラムや機械の事
一応こういう用語の使い方でお願いします。ちなみに、後に「アセンブリ」には別の意味が加わります。斜め読みする方は注意を。
それで、今回はアセンブルします。そのためにアセンブラを使います。アセンブラは「ilasm」という名前です。
I:\temp\cm>ilasm sample.il
Microsoft (R) .NET Framework IL Assembler. Version 1.1.4322.2032
Copyright (C) Microsoft Corporation 1998-2002. All rights reserved.
Assembling 'sample.il' , no listing file, to EXE --> 'sample.EXE'
Source file is ANSI
Assembled method Program::Main
Assembled method Program::.ctor
Creating PE file
Emitting members:
Global
Class 1 Methods: 2;
Writing PE file
Operation completed successfully
I:\temp\cm>
一応皆さん、このテストをしてみてください。C#またはVB.Netで短いソースを作成、コンパイル、逆アセンブル、アセンブル。全て成功すれば問題ありません。安心して次に進めます。失敗した方は・・・あなたの最善だと思う行動を。
まさか、今回のためにコマンドプロンプトを覚えた人はいないと思うので元々統合開発環境以外でもプログラム経験があるモノかと。頼もしいです。
ページの一番上へ
前のページへ 次のページへ
初版2006-8-6 最終更新2006-8-11
(c) 2006,Atelier Blue (Rito)
- 質問から意見、誤字訂正まで気軽に連絡してください。
- こちらに掲示板も用意しています。「プログラム掲示板」
- リンクに関してはご自由にどうぞ。
- 書いてある情報については、特に断り書きがない限り自由に使ってください。そのまま転載しても、書き換えたりして再利用してもかまいません。