|
ILSpyのデコンパイルツールの使用。 ただし、ILspyは.NET Framework 4.0のインストールが必要です。 ILspyはdllファイルをC#またはVB言語に変換できます。 ILspyは単一のファイルを.csファイルまたは.vbファイルとして保存でき、ファイルが多ければプロジェクトファイルとして保存することも可能です。 C#文はILspyによってデコンパイルでき、yield return文やλs式のデコンパイルもサポートできます。 以前は.NETライブラリの情報を見るためにReflectorを使っていましたが、2011年2月以降、Reflectorは有料ソフトウェアへ移行し、フリーソフトウェアを愛する開発者たちは自分たちでデコンパイルしたソフトウェアの開発に移っています。 だからILspyは運によって生まれたのです。 ILSPYはリフレクターを置き換えるオープンソースツールであり、リフレクターに似たコードをデコンパイルします。 SharpDevelopもまた、唯一の存在です。 .NETのオープンツールで、オープンソースです。 また、Visual Studioの書き換えのようなかなり良い機能も備えています。 最新バージョンでは、Visual Studioのソリューションセキュリティファイルおよびプロジェクトファイルのサポートが直接追加されました。 ILSpyはSharpDevelopグループのデコンパイラツールであり、こちらもオープンソースです。そのデバッガとデコンパイラについては以下に説明します。
ILspyのインターフェースのスクリーンショット
ILSpyのインターフェースはReflectorに似ており、ツリーコントロールが左側にアセンブリとその型を示し、右側に対応するソースコードを表示します。 基本的なデコンパイル機能はReflectorと比べて悪くなく、時にはReflectorではデコンパイルできないアセンブリ(暗号化のため)に対してILSpyで逆コンパイルできる場合もあります。
ILspyは.NET Framework 4.0のインストールが必要です。ILspyにはいくつかの一般的な機能があります基本的な型の逆コンパイル関数が利用可能です 現在は、VBではなく、C#やIL言語へのソースコードのデコンパイルのみがサポートされています。 レンダリング図は以下の通りです:
ILSpyのコードセーブ機能 タイプをクリックすると、ファイル>セーブコードを選択すると現在のタイプがデコンパイルされ、指定されたファイルに保存されます。アセンブリを選択すると、セーブコードはプロジェクト(csproj)ファイルとして保存され、そのすべてのタイプがプロジェクトに追加されます。
ILSpyのデバッガ機能 ここでのデバッガはVisual Studioを指していません源デバッガのレベルですが、アセンブリのデバッガを指します。 Reflectorには、サードパーティ型ライブラリをデコンパイルせずにデバッグできるアドインがあり、Visual Studioに直接接続できます。 ILSpyにもこの機能があり、サードパーティアセンブリを直接デバッグできる2つのオプションがあります サードパーティ製のライブラリが実行ファイルであれば、Debug an executableでプログラムを起動できます。 サードパーティ型ライブラリがアセンブリ(DLL)であれば、Attach to running applicationでアセットしてアセンブリのデバッグを始めることができます。
上の画像からもわかるように、その使い方はソースコードのデバッグと同じです。 変数の値を監視し、ブレークポイントを設定し、プログラムがこのポイントに到達したときに、フォームを監視することで変数の値を観察できます。 両者の違いは、Attachが実行中のアプリケーションにデバッグされる際、コンパイラによってコードが最適化された場合、モニターはその値を取得できない点です。
画像に示されているように、デバッグ対象の変数numの値はコードが最適化されているため表示できません。 公式に推奨されている方法は、実行ファイルをデバッグすることです Visual Studioで.NETのソースコードをデバッグするのと同様に、ステップイン、ステップオーバー、コンティニューを操作すると、ステータスバーにスタンバイ、実行中、デバッグ中が表示されます。
アセンブリのC#/VB形式でのデバッグに加え、下図のようにILコードでもデバッグ可能です
ILSpyのデバッガはプラグインとして存在しますので、必ずILSpy.Debuggerプラグインを含めてください。
でもデバッグは問題です。 .NETアセンブリはPDBファイルを必要としなければなりません。 しかし、ILSpyはPDBファイルを生成せず(PDBファイルは生成されません)、またウェブアプリケーションやウェブサービスのデバッグ ASP.NET できません。
|