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

More than 3 years have passed since last update.


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