How to view the disassembly of a delegate created by compiling an expression tree?

I want the x86 assembly to be generated by the .Net just-in-time compiler. I know how to do this for “normal” code compiled ahead of time, but I don’t know how to do this for dynamically generated code at runtime (what I'm doing with expression trees).

I'm not even sure what to try. For example, a delegate created by compiling an expression tree points to an address, but I don’t know what to use to see what is at that address.

+5
source share
2 answers

leppie, . . , . 100% , , , .

( , ):

/// <summary>
/// Writes an assembly, containing the given method, to the working directory.
/// The assembly, type, and method are named based on the given hash name.
/// </summary>
public static void WriteMethodToAssembly<T>(Expression<T> method, string hashName) {
    var assemblyName = new AssemblyName(hashName);
    var assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.RunAndSave);
    var moduleBuilder = assemblyBuilder.DefineDynamicModule(assemblyName.Name, assemblyName.Name + ".dll");
    var typeBuilder = moduleBuilder.DefineType(hashName, TypeAttributes.Public);
    var methodBuilder = typeBuilder.DefineMethod("Run" + hashName, MethodAttributes.Public | MethodAttributes.Static);
    method.CompileToMethod(methodBuilder);

    typeBuilder.CreateType();
    assemblyBuilder.Save(hashName + ".dll");
}

, , , .

+2
+2

All Articles