.NETアセンブリの逆コンパイル(ILSpy)
このスキルを使用して、コンパイル済みアセンブリを逆コンパイルし、.NETコードの内部動作を理解します。
前提条件
- .NET SDKがインストールされていること
- ILSpyコマンドラインツールが次のいずれかで利用可能であること:
dnx ilspycmd(SDKまたはランタイムで利用可能な場合)dotnet tool install --global ilspycmd
以下に両方の形式を示します。環境で動作する方を使用してください。
注:ILSpyCmdのオプションはバージョンによって若干異なる場合があります。 サポートされているフラグは常に
ilspycmd -hで確認してください。
クイックスタート
# アセンブリを標準出力に逆コンパイル
ilspycmd MyLibrary.dll
# または
dnx ilspycmd MyLibrary.dll
# 出力フォルダに逆コンパイル
ilspycmd -o output-folder MyLibrary.dll
一般的な.NETアセンブリの場所
NuGetパッケージ
~/.nuget/packages/<package-name>/<version>/lib/<tfm>/
.NETランタイムライブラリ
dotnet --list-runtimes
.NET SDK参照アセンブリ
dotnet --list-sdks
参照アセンブリには実装が含まれていません。
プロジェクトビルド出力
./bin/Debug/net8.0/<AssemblyName>.dll
./bin/Release/net8.0/publish/<AssemblyName>.dll
基本ワークフロー
- 理解したい対象を特定する
- アセンブリの場所を特定する
- 型を一覧表示する
- ターゲットを逆コンパイルする
コマンド
基本逆コンパイル
ilspycmd MyLibrary.dll
ilspycmd -o ./decompiled MyLibrary.dll
ilspycmd -p -o ./project MyLibrary.dll
ターゲット指定逆コンパイル
ilspycmd -t Namespace.ClassName MyLibrary.dll
ilspycmd -lv CSharp12_0 MyLibrary.dll
ILコードの表示
ilspycmd -il MyLibrary.dll
最新の.NETビルドに関する注意
- ReadyToRunイメージは可読性を低下させる可能性があります
- トリミングビルドやAOTビルドではコードが省略されることがあります
- 非トリミングビルドを優先してください
法的注意
アセンブリの逆コンパイルはライセンス制限の対象となる場合があります。