私は専用のミニ コンパイラを作成しており、逆アセンブルされた CIL をよく見て、やり方を理解しています。しかし、逆アセンブルされたコードを Reflection.Emit 呼び出しに変換する方法が明確でないことがよくあります。この翻訳を行うための参照マニュアルまたはその他の情報源はありますか?
編集: はい、オペコードを ILGenerator にマッピングするのは非常に簡単です。私は .directives や属性のような他のすべてのものについて話しています。たとえば、次のようなものに相当する Reflection.Emit の書き方をどのように見つけますDictionary<TKey,TValue>
か?
.class public auto ansi serializable beforefieldinit Dictionary<TKey, TValue>
extends System.Object
implements System.Collections.Generic.IDictionary`2<!TKey, !TValue>,
System.Collections.Generic.ICollection`1<valuetype
System.Collections.Generic.KeyValuePair`2<!TKey, !TValue>>,
...
{
.custom instance void System.Diagnostics.DebuggerDisplayAttribute::
.ctor(string) = { string('Count = {Count}') }
.method public hidebysig newslot virtual final instance bool TryGetValue
(!TKey key, [out] !TValue& 'value') cil managed
{
.maxstack 3
.locals init ([0] int32 num)
...
または、「param」ディレクティブはどうですか?
// public static void SayHello(string s = "Hello World!")
.method public hidebysig static void SayHello([opt] string s) cil managed
{
.param [1] = "Hello World!"