Skip to content

Instantly share code, notes, and snippets.

@valerysntx
Created December 4, 2018 19:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save valerysntx/57238be5a4295435ff1c162a45f4cb59 to your computer and use it in GitHub Desktop.
Save valerysntx/57238be5a4295435ff1c162a45f4cb59 to your computer and use it in GitHub Desktop.
ActivatorEx IL
// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.33440
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// Metadata version: v4.0.30319
.assembly extern mscorlib
{
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
.ver 4:0:0:0
}
.assembly extern System.Core
{
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
.ver 4:0:0:0
}
.assembly aysp421r
{
.hash algorithm 0x00008004
.ver 0:0:0:0
}
.module aysp421r.dll
// MVID: {4F37BC85-8FCA-4EC3-8933-502D723AFA5E}
.imagebase 0x10000000
.file alignment 0x00000200
.stackreserve 0x00100000
.subsystem 0x0003 // WINDOWS_CUI
.corflags 0x00000001 // ILONLY
// Image base: 0x011D0000
// =============== CLASS MEMBERS DECLARATION ===================
.class public auto ansi beforefieldinit Program
extends [mscorlib]System.Object
{
.class auto ansi nested public beforefieldinit Hello
extends [mscorlib]System.Object
{
.method public hidebysig specialname rtspecialname
instance void .ctor(string greetMessage,
int32 age) cil managed
{
//
.maxstack 8
IL_0000: ldarg.0
IL_0001: call instance void [mscorlib]System.Object::.ctor()
IL_0006: nop
IL_0007: nop
IL_0008: ldarg.1
IL_0009: ldarga.s age
IL_000b: call instance string [mscorlib]System.Int32::ToString()
IL_0010: call string [mscorlib]System.String::Concat(string,
string)
IL_0015: call void [mscorlib]System.Console::WriteLine(string)
IL_001a: nop
IL_001b: nop
IL_001c: ret
} // end of method Hello::.ctor
} // end of class Hello
.method public hidebysig static void Main() cil managed
{
//
.maxstack 4
.locals init (class ActivatorEx/ObjectActivator`1<class Program/Hello> V_0,
object[] V_1)
IL_0000: nop
IL_0001: call class ActivatorEx/ObjectActivator`1<!!0> ActivatorEx::CreateFactoryFor<class Program/Hello>()
IL_0006: stloc.0
IL_0007: ldloc.0
IL_0008: ldc.i4.2
IL_0009: newarr [mscorlib]System.Object
IL_000e: stloc.1
IL_000f: ldloc.1
IL_0010: ldc.i4.0
IL_0011: ldstr "greeting! my age is "
IL_0016: stelem.ref
IL_0017: ldloc.1
IL_0018: ldc.i4.1
IL_0019: ldc.i4.s 18
IL_001b: box [mscorlib]System.Int32
IL_0020: stelem.ref
IL_0021: ldloc.1
IL_0022: callvirt instance !0 class ActivatorEx/ObjectActivator`1<class Program/Hello>::Invoke(object[])
IL_0027: pop
IL_0028: ret
} // end of method Program::Main
.method public hidebysig specialname rtspecialname
instance void .ctor() cil managed
{
//
.maxstack 8
IL_0000: ldarg.0
IL_0001: call instance void [mscorlib]System.Object::.ctor()
IL_0006: ret
} // end of method Program::.ctor
} // end of class Program
.class public auto ansi beforefieldinit ActivatorEx
extends [mscorlib]System.Object
{
.class auto ansi sealed nested public ObjectActivator`1<T>
extends [mscorlib]System.MulticastDelegate
{
.method public hidebysig specialname rtspecialname
instance void .ctor(object 'object',
native int 'method') runtime managed
{
} // end of method ObjectActivator`1::.ctor
.method public hidebysig newslot virtual
instance !T Invoke(object[] args) runtime managed
{
} // end of method ObjectActivator`1::Invoke
.method public hidebysig newslot virtual
instance class [mscorlib]System.IAsyncResult
BeginInvoke(object[] args,
class [mscorlib]System.AsyncCallback callback,
object 'object') runtime managed
{
} // end of method ObjectActivator`1::BeginInvoke
.method public hidebysig newslot virtual
instance !T EndInvoke(class [mscorlib]System.IAsyncResult result) runtime managed
{
} // end of method ObjectActivator`1::EndInvoke
} // end of class ObjectActivator`1
.method public hidebysig static !!T Create<T>(object[] args) cil managed
{
//
.maxstack 4
.locals init (!!T V_0,
object[][] V_1)
IL_0000: nop
IL_0001: call class ActivatorEx/ObjectActivator`1<!!0> ActivatorEx::CreateFactoryFor<!!0>()
IL_0006: ldc.i4.1
IL_0007: newarr object[]
IL_000c: stloc.1
IL_000d: ldloc.1
IL_000e: ldc.i4.0
IL_000f: ldarg.0
IL_0010: stelem.ref
IL_0011: ldloc.1
IL_0012: callvirt instance !0 class ActivatorEx/ObjectActivator`1<!!T>::Invoke(object[])
IL_0017: stloc.0
IL_0018: br.s IL_001a
IL_001a: ldloc.0
IL_001b: ret
} // end of method ActivatorEx::Create
.method public hidebysig static class ActivatorEx/ObjectActivator`1<!!T>
GetActivator<T>(class [mscorlib]System.Reflection.ConstructorInfo ctor) cil managed
{
//
.maxstack 5
.locals init (class [mscorlib]System.Type V_0,
class [mscorlib]System.Reflection.ParameterInfo[] V_1,
class [System.Core]System.Linq.Expressions.ParameterExpression V_2,
class [System.Core]System.Linq.Expressions.Expression[] V_3,
int32 V_4,
class [System.Core]System.Linq.Expressions.Expression V_5,
class [mscorlib]System.Type V_6,
class [System.Core]System.Linq.Expressions.Expression V_7,
class [System.Core]System.Linq.Expressions.Expression V_8,
class [System.Core]System.Linq.Expressions.NewExpression V_9,
class [System.Core]System.Linq.Expressions.LambdaExpression V_10,
class ActivatorEx/ObjectActivator`1<!!T> V_11,
class ActivatorEx/ObjectActivator`1<!!T> V_12,
bool V_13,
class [System.Core]System.Linq.Expressions.ParameterExpression[] V_14)
IL_0000: nop
IL_0001: ldarg.0
IL_0002: callvirt instance class [mscorlib]System.Type [mscorlib]System.Reflection.MemberInfo::get_DeclaringType()
IL_0007: stloc.0
IL_0008: ldarg.0
IL_0009: callvirt instance class [mscorlib]System.Reflection.ParameterInfo[] [mscorlib]System.Reflection.MethodBase::GetParameters()
IL_000e: stloc.1
IL_000f: ldc.i4.0
IL_0010: newarr [mscorlib]System.Object
IL_0015: call instance class [mscorlib]System.Type [mscorlib]System.Object::GetType()
IL_001a: ldstr "args"
IL_001f: call class [System.Core]System.Linq.Expressions.ParameterExpression [System.Core]System.Linq.Expressions.Expression::Parameter(class [mscorlib]System.Type,
string)
IL_0024: stloc.2
IL_0025: ldloc.1
IL_0026: ldlen
IL_0027: conv.i4
IL_0028: newarr [System.Core]System.Linq.Expressions.Expression
IL_002d: stloc.3
IL_002e: ldc.i4.0
IL_002f: stloc.s V_4
IL_0031: br.s IL_006f
IL_0033: nop
IL_0034: ldloc.s V_4
IL_0036: box [mscorlib]System.Int32
IL_003b: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object)
IL_0040: stloc.s V_5
IL_0042: ldloc.1
IL_0043: ldloc.s V_4
IL_0045: ldelem.ref
IL_0046: callvirt instance class [mscorlib]System.Type [mscorlib]System.Reflection.ParameterInfo::get_ParameterType()
IL_004b: stloc.s V_6
IL_004d: ldloc.2
IL_004e: ldloc.s V_5
IL_0050: call class [System.Core]System.Linq.Expressions.BinaryExpression [System.Core]System.Linq.Expressions.Expression::ArrayIndex(class [System.Core]System.Linq.Expressions.Expression,
class [System.Core]System.Linq.Expressions.Expression)
IL_0055: stloc.s V_7
IL_0057: ldloc.s V_7
IL_0059: ldloc.s V_6
IL_005b: call class [System.Core]System.Linq.Expressions.UnaryExpression [System.Core]System.Linq.Expressions.Expression::Convert(class [System.Core]System.Linq.Expressions.Expression,
class [mscorlib]System.Type)
IL_0060: stloc.s V_8
IL_0062: ldloc.3
IL_0063: ldloc.s V_4
IL_0065: ldloc.s V_8
IL_0067: stelem.ref
IL_0068: nop
IL_0069: ldloc.s V_4
IL_006b: ldc.i4.1
IL_006c: add
IL_006d: stloc.s V_4
IL_006f: ldloc.s V_4
IL_0071: ldloc.1
IL_0072: ldlen
IL_0073: conv.i4
IL_0074: clt
IL_0076: stloc.s V_13
IL_0078: ldloc.s V_13
IL_007a: brtrue.s IL_0033
IL_007c: ldarg.0
IL_007d: ldloc.3
IL_007e: call class [System.Core]System.Linq.Expressions.NewExpression [System.Core]System.Linq.Expressions.Expression::New(class [mscorlib]System.Reflection.ConstructorInfo,
class [System.Core]System.Linq.Expressions.Expression[])
IL_0083: stloc.s V_9
IL_0085: ldtoken class ActivatorEx/ObjectActivator`1<!!T>
IL_008a: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
IL_008f: ldloc.s V_9
IL_0091: ldc.i4.1
IL_0092: newarr [System.Core]System.Linq.Expressions.ParameterExpression
IL_0097: stloc.s V_14
IL_0099: ldloc.s V_14
IL_009b: ldc.i4.0
IL_009c: ldloc.2
IL_009d: stelem.ref
IL_009e: ldloc.s V_14
IL_00a0: call class [System.Core]System.Linq.Expressions.LambdaExpression [System.Core]System.Linq.Expressions.Expression::Lambda(class [mscorlib]System.Type,
class [System.Core]System.Linq.Expressions.Expression,
class [System.Core]System.Linq.Expressions.ParameterExpression[])
IL_00a5: stloc.s V_10
IL_00a7: ldloc.s V_10
IL_00a9: callvirt instance class [mscorlib]System.Delegate [System.Core]System.Linq.Expressions.LambdaExpression::Compile()
IL_00ae: castclass class ActivatorEx/ObjectActivator`1<!!T>
IL_00b3: stloc.s V_11
IL_00b5: ldloc.s V_11
IL_00b7: stloc.s V_12
IL_00b9: br.s IL_00bb
IL_00bb: ldloc.s V_12
IL_00bd: ret
} // end of method ActivatorEx::GetActivator
.method public hidebysig static class ActivatorEx/ObjectActivator`1<!!T>
CreateFactoryFor<T>() cil managed
{
//
.maxstack 1
.locals init (class [mscorlib]System.Reflection.ConstructorInfo V_0,
class ActivatorEx/ObjectActivator`1<!!T> V_1,
class ActivatorEx/ObjectActivator`1<!!T> V_2)
IL_0000: nop
IL_0001: ldtoken !!T
IL_0006: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
IL_000b: call instance class [mscorlib]System.Reflection.ConstructorInfo[] [mscorlib]System.Type::GetConstructors()
IL_0010: call !!0 [System.Core]System.Linq.Enumerable::First<class [mscorlib]System.Reflection.ConstructorInfo>(class [mscorlib]System.Collections.Generic.IEnumerable`1<!!0>)
IL_0015: stloc.0
IL_0016: ldloc.0
IL_0017: call class ActivatorEx/ObjectActivator`1<!!0> ActivatorEx::GetActivator<!!0>(class [mscorlib]System.Reflection.ConstructorInfo)
IL_001c: stloc.1
IL_001d: ldloc.1
IL_001e: stloc.2
IL_001f: br.s IL_0021
IL_0021: ldloc.2
IL_0022: ret
} // end of method ActivatorEx::CreateFactoryFor
.method public hidebysig specialname rtspecialname
instance void .ctor() cil managed
{
//
.maxstack 8
IL_0000: ldarg.0
IL_0001: call instance void [mscorlib]System.Object::.ctor()
IL_0006: ret
} // end of method ActivatorEx::.ctor
} // end of class ActivatorEx
// =============================================================
//
//
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment