troushoo

ILSpy 2.0で.NETアプリケーションのデコンパイル

フリーで使用できる、オープンソースの.NETのデコンパイラであるILSpy の2.0 Betaの紹介を行います。
V2.0 Beta の新機能は以下です。

以下それぞれの機能についてみていきます。
(以下はILSpy 2.0.0.1564時のスクリーンショットです)

# 2012/04/25追記 #
2012/04/15にRTW(Release To Web: Beta版ではない最終版のこと)がリリースされました。
ただし、Betaにあったデバッガーとの統合の機能は、機能が不安定であるとのことでRTWでの採用を見送られました。
ただし、公開されているソースコードを自分でビルドすると、デバッガーとの統合の機能も使用することは可能です。
http://community.sharpdevelop.net/blogs/christophwille/archive/2012/04/15/ilspy-2-0-final.aspx

ILSpy 2.0 Betaの機能

File → Open Listからアセンブリのリストの選択が可能になっております。
アセンブリのリストとは、以下のスクリーンショットからもわかる通り、「.ASP.NET (MVC3)のアセンブリ一式」といった具合です。


ASP.NET (MVC3)のアセンブリ一式が読み込まれる。

MSDNの式ツリー(http://msdn.microsoft.com/en-us/library/bb397951.aspx)のページの以下のサンプルコードをV2.0とV1.0でデコンパイルしてみました。
V2.0ではきちんとデコンパイルできていました。

コード

static void Main(string[] args)
{
    // Creating an expression tree.
    Expression<Func<int, bool>> expr = num => num < 5;
 
    // Compiling the expression tree into a delegate.
    Func<int, bool> result = expr.Compile();
 
    // Invoking the delegate and writing the result to the console.
    Console.WriteLine(result(4));
 
    // Prints True.
 
    // You can also use simplified syntax
    // to compile and run an expression tree.
    // The following line can replace two previous statements.
    Console.WriteLine(expr.Compile()(4));
 
    // Also prints True.
 
}

V2.0

V1.0

Lifted operatorsを利用する以下のサンプルコードをV2.0とV1.0でデコンパイルしてみました。
V2.0ではきちんとデコンパイルできていました。

コード

static void Main(string[] args)
{
    int? a = null;
    int? b = null;
 
    Console.WriteLine(a == b);
    Console.WriteLine(a >= b);
    Console.WriteLine(a <= b);      
}
V2

V1

ILSpyでソースコードもシンボルもないモジュールをデバッグすることができるようになります。
使用例は以下です。
1. まず、デバッグしたいモジュール(ここでは上記"Lift Operatorsのサポート"のところで使用したコードのEXE)読み込んで、ブレークポイントを張ります。
ブレークポイントは、以下のスクリーンショットの"この部分"をクリックすると張ることができます。(Visual Studioと同様です。)
 
2. "Debug an executable"(以下の青丸の部分)をクリックし、Exeへのパス、引数(空白でも可能)、Working directoryを選択して、"Execute"を実行します。
 
 
3. ブレークポイントを張ったところでブレークします。
この時のローカル変数も確認可能です。
 
4. 以下のように、デバッガでよく使うコマンドは使用可能です。

5. 以下は、上記の状態からStep Intoをしたところです。
 
6. コールスタックも表示可能です。
 
補足1) 現在起動中のアプリにアッタチすることもDebugger -> Attach to running applicationより可能です。
 
しかし、最適化されたアプリはローカル変数が見えないこともあるため、以下のようなダイアログが表示されます。
 
OKを押すと以下のような画面になりアッタチができます。
 
補足2) x64環境でx86の.NETアプリをデバッグしようとすると以下のダイアログが表示され、デバッグできません。

V2
 
V1ではVBは表示されません。

たとえば、"ContextMenuProvider"を検索するのに、"Context Provider"と入力するとV1ではヒットしませんが、V2ではヒットします。
V2
 
V1ではヒットしないことがわかります。

V2
 
V1では、ハイライトされません。
48-24

リンク
・ILSpy 2.0 Beta 1
http://community.sharpdevelop.net/blogs/danielgrunwald/archive/2012/02/16/ilspy-2-0-beta-1.aspx
・ILSpy Debugger Preview
http://community.sharpdevelop.net/blogs/marcueusebiu/archive/2011/04/12/ilspy-debugger-preview.aspx
・ILSpy debugger preview – 2
http://community.sharpdevelop.net/blogs/marcueusebiu/archive/2011/05/07/ilspy-debugger-preview-2.aspx


  1. 2012/04/25(水) 12:23:30|
  2. ツール
  3. | トラックバック:0
  4. | コメント:0
<<[sos]!Threads:マネージスレッドの情報表示 | ホーム | Visual Studioでプロファイル(同時実行)>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://troushoo.blog.fc2.com/tb.php/49-b8b10a74
この記事にトラックバックする(FC2ブログユーザー)

スポンサーリンク

最新記事

月別アーカイブ

カテゴリ

ツール (92)
ネットワーク (76)
Visual Studio (56)
SOS・Psscor2/Psscor4 (25)
WinDbg (25)
Linux (24)
Azure (17)
Tips (20)
英語 (1)
About Me (1)
未分類 (0)

全記事表示リンク

全ての記事を表示する

検索フォーム

RSSリンクの表示

リンク

このブログをリンクに追加する