.NETのexe/dllとMSILを相互に変換する

  • 6
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

exe/dll → msil

ildasm.exeを使います。格納位置は以下の様な場所です。お察しの通りVisualStudioなどをインストールすると一緒に入ってくるようです。簡易なILSpyのようなGUIもついています。クラス名などの確認だけなら普通に使えます。


C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\ildasm.exe

構文

ildasm [options] [PEfilename] [options]

よく使うオプション

名前 意味
/out=filename.il GUIで表示せずに、ファイルへ出力する
/nobar 変換中のプログレスバーを非表示
/utf8 ANSIではなく、UTF8で出力する

例によってUnityのDLLをilに変換します。
> ildasm /out=Assembly-CSharp.il Assembly-CSharp.dll

公式ドキュメント
https://msdn.microsoft.com/ja-jp/library/f7dy01k1(v=vs.110).aspx

msil → exe/dll

ilasm.exeを使います。こちらは、VSが入っていなくとも使えます。


C:\Windows\Microsoft.NET\Framework\v4.0.30319\ilasm.exe

よく使うオプション

名前 意味
/dll 標準のexeではなく、dllを出力
/output:filename ファイル名を拡張子付きで指定。標準は入力ファイルと同等
/x64 ターゲットをAMD64に設定
/pe64 標準ではitaniumの64bitに設定

> ilasm.exe /dll Assembly-CSharp.il

公式ドキュメント
https://msdn.microsoft.com/ja-jp/library/496e4ekx(v=vs.110).aspx

MSILを読みあたって、参考にしたサイト
http://www.asukaze.net/etc/cil/opcode.html