.NET TIPS

無償の逆コンパイラ「ILSpy」を利用するには?[C#]

デジタルアドバンテージ 一色 政彦
2011/04/07

 .NET開発では、プログラム内部の動作をデバッグするなどの目的で、逆コンパイラ(decompiler)が用いられることがよくある。逆コンパイラとは、.NETアセンブリ(=.EXEファイルや.DLLファイルなど)から、C#やVB(Visual Basic)などのソース・コードを生成できるツールのことである。

 有名なツールに、.NET Reflectorがあり、これに機能を追加するアドインも豊富に提供されている(.NET Reflectorについては、「.NET Tools:.NET逆コンパイラとコードを難読化するDotfuscator」を参照してほしい)。.NET Reflector(標準版)は、長らく無償で提供されてきたが、2011年3月10日から35米ドルの有料となった(執筆時点。なお、この有償化の理由は、これまで実施してきた無償版+有償版という組み合わせのビジネス・モデルの収益では開発を維持できないから、ということである)。

 この流れに対応して、オープンソースによる無償の逆コンパイラ・ツール「ILSpy」の開発が開始された。そこで本TIPSでは、このILSpyの入手から利用までを紹介する。

 ILSpyのバージョンは、2011年4月7日時点で「1.0 M1(マイルストーン1)」、つまり、まだベータ版である。筆者が試す限りでは問題なく利用できているが、場合によってはエラーが発生したり、不安定な部分が存在したりする可能性があるので、実利用する際にはご留意いただきたい。また、ILSpyは残念ながら(執筆時点で)VBに対応していない。

* なお、逆コンパイルを行う場合は、対象ソフトウェアの使用許諾に従って自己責任で行ってほしい。

■ILSpyの入手方法

 ILSpyは、無償の.NET開発ツール「SharpDevelop」の一部コンポーネントとしてSourceForge.netで配布されている。

 上記のリンク先を開き、(SourceForge.netの場合、[1.0]というリンクをクリックして開き、次の表示されるページで)「xxx_Binaries.zip」(例:「ILSpy_1.0.0.417_M1_Binaries.zip」)というリンクをクリックすると、ダウンロードが開始される。ダウンロードされた.ZIPファイルを展開すると、次の画面のように表示されるので、ILSpy.exeファイルをダブルクリックするなどして実行すれば、ILSpyのGUI(Windowsアプリケーション)が起動する。

「ILSpy.exe」をダブルクリック
ILSpyの起動

■ILSpyの利用方法

●ILSpyの画面構成

 ILSpyでは、次の画面に示すように左側ペインに各アセンブリ(とその内容)がツリー形式で表示され、そこで選択しているアセンブリ項目(もしくは、その内容項目)の逆コンパイル結果が右側ペインに表示される。

ILSpyの画面構成
ILSpyの画面は、基本的に下記の4つのパーツで構成される。
  メニューバー。ちなみに、バージョン情報は[ヘルプ]メニューから表示できる。
  ツールバー。基本的な操作はここから素早く行える。
  左側ペイン:各アセンブリ(とその内容)がツリー形式で表示される。逆コンパイルしたい対象項目を選択する
  右側ペイン:選択中の項目の逆コンパイル結果が表示される。

●BCLアセンブリの追加

 左側のアセンブリ・ツリーには、.NET Framework基本クラス・ライブラリ(BCL)の主なアセンブリ(「mscorlib」や「System」)がデフォルトで登録されている。

 ここに登録されていないアセンブリを逆コンパイルしたい場合には、メニューバーから[File]−[Open from GAC]を選択する。これにより[Open From GAC]ダイアログ(次の画面を参照)が起動し、そこでGAC(グローバル・アセンブリ・キャッシュ)に存在するアセンブリの一覧が表示されるので、適切なアセンブリ項目を選択して[Open]ボタンをクリックする。

GACからのアセンブリの追加([Open From GAC]ダイアログ)
同名の選択項目がある場合には、[Version]列から適切なバージョンを選択する。このバージョンは基本的に.NET FrameworkのCLR(共通言語ランタイム)のバージョンと一致している。

 その結果、ILSpyの左側にあるアセンブリ・ツリーにアセンブリ項目(この例では「System.Web」)が追加される。

 なお、[Open From GAC]ダイアログに表示されるアセンブリが多すぎて、目的のアセンブリを見つけにくいときには、[Search]テキストボックスにアセンブリ名の一部を入力して検索するとよい。

●自作アセンブリの追加

 BCLのアセンブリではなく、任意のアセンブリ(厳密にはGACに存在しないアセンブリ)を追加したい場合は、メニューバーから[File]−[開く]を選択する(もしくはツールバー上にある[Open]ボタンをクリックする)。これにより[開く]ダイアログ(次の画面を参照)が表示されるので、適切なアセンブリ・ファイルを選択して[開く]ボタンをクリックする。

任意のアセンブリの追加([開く]ダイアログ)

 その結果、ILSpyの左側にあるアセンブリ・ツリーにアセンブリ項目(この例では「WpfRibbonApplication1」)が追加される。

●.NETアセンブリの逆コンパイル結果(C#/IL)

 以上のようにして追加された.NETアセンブリの目的のクラスなどを、左側のアセンブリ・ツリーで選択する。これにより、右側の逆コンパイル結果にそのクラスのC#ソース・コードが表示される(次の画面を参照)。

.NETアセンブリの逆コンパイル結果
この例では、左側のアセンブリ・ツリーで、[WpfRibbonApplication1]アセンブリ−[WpfRibbonApplication1]名前空間−[WpfRibbonApplication1]クラスの項目を選択しており、そのクラスのC#ソース・コードが右側の逆コンパイル結果に表示されている。
なお、ツールバー上のコンボボックスで「C#」から「IL」に選択を切り替えれば、IL(中間言語)コードで逆コンパイル結果を表示することもできる。

●ファイルへの逆コンパイル結果の保存

 逆コンパイル結果は、ソース・ファイルとして保存できる。厳密には、アセンブリ項目の場合はVisual C#のプロジェクトとして、その配下にあるクラス項目などは.csファイルとして保存できる(なお、ツールバー上のコンボボックスで「IL」を選択している場合は、.ilファイルとして保存できる。ただし、ILではプロジェクト単位で保存できない)。

 実際に保存するには、メニューバーから[File]−[Save Code]を実行する。これにより、[名前を付けて保存]ダイアログが表示されるので、任意のフォルダにファイルやプロジェクトを保存すればよい。以下の画面に、その手順を示す。

「WpfRibbonApplication1」アセンブリ項目を選択して、メニューバーから[File]−[Save Code]を実行
[保存]ボタンをクリック
[Open Explorer]ボタンをクリック
ファイルへの逆コンパイル結果の保存

■ILSpyに関する情報

 ILSpyに関する情報は、下記のリンク先で入手できる(ただし、いずれも英語)。

 なお、ILSpyの開発はGitHub上で行われているEnd of Article

カテゴリ:開発環境&ツール 処理対象:ツール

この記事と関連性の高い別の.NET TIPS
[参照の追加]ダイアログに独自のアセンブリを表示するには?
GAC(グローバル・アセンブリ・キャッシュ)からファイルを取り出すには?
Visual Studio 2005でバージョン情報を設定するには?
C#のコードをVBに、VBのコードをC#に変換するには?
[ASP.NET]ページから生成されたソース・コードを見るには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」

@IT Special

- PR -

TechTargetジャパン

Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

イベントカレンダー

PickUpイベント

- PR -

アクセスランキング

もっと見る

ホワイトペーパーTechTargetジャパン

注目のテーマ

Insider.NET 記事ランキング

本日 月間
ソリューションFLASH