Example #1
0
        internal static string ToStringReflectionEmitWithVerification <T>(this T @this)
        {
            var target = @this.GetType();

            var name = new AssemblyName()
            {
                Name = "ToStringWithVerification"
            };
            var assembly = AppDomain.CurrentDomain.DefineDynamicAssembly(
                name, AssemblyBuilderAccess.RunAndSave);
            var module = assembly.DefineDynamicModule(name.Name + ".dll");

            var fullTypeName = target.Namespace + "." + target.Name;
            var type         = module.DefineType(target.Namespace + "." + target.Name, TypeAttributes.Public);
            var methodName   = "ToString" + target.GetHashCode().ToString();
            var method       = type.DefineMethod(methodName,
                                                 MethodAttributes.Static | MethodAttributes.Public,
                                                 typeof(string), new Type[] { target });

            var generator = method.GetILGenerator();

            //generator.Emit(OpCodes.Ldstr, fullTypeName);
            generator.Emit(OpCodes.Ret);

            var createdType = type.CreateType();

            assembly.Save(name.Name + ".dll");
            AssemblyVerification.Verify(assembly);

            var createdMethod = createdType.GetMethod(methodName);

            return(((Func <T, string>)Delegate.CreateDelegate(
                        typeof(Func <T, string>), createdMethod))(@this));
        }
Example #2
0
        internal Assembly Generate()
        {
            var name = new AssemblyName();

            name.Name    = this.Namespace;
            name.Version = new Version(1, 0, 0, 0);
            string fileName = name.Name + ".dll";

            var assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(
                name, AssemblyBuilderAccess.RunAndSave);

            var moduleBuilder = assemblyBuilder.DefineDynamicModule(name.Name, fileName, false);

            foreach (var type in this.Types)
            {
                var typeBuilder = moduleBuilder.DefineType(
                    this.Namespace + "." + type.Key,
                    TypeAttributes.Class | TypeAttributes.Public,
                    typeof(object));

                AssemblyGenerator.GenerateConstructor(typeBuilder);

                foreach (var method in type.Value)
                {
                    AssemblyGenerator.GenerateMethod(typeBuilder, method);
                }

                typeBuilder.CreateType();
            }

            assemblyBuilder.Save(fileName);
            AssemblyVerification.Verify(assemblyBuilder);

            return(assemblyBuilder);
        }
Example #3
0
        private static void Save(AssemblyBuilder assembly, ProxyContext context)
        {
            if ((context.Access & AssemblyBuilderAccess.Save) == AssemblyBuilderAccess.Save)
            {
                assembly.Save(assembly.GetName().Name + ".dll");

                if (context.Verify)
                {
                    AssemblyVerification.Verify(assembly);
                }
            }
        }
        protected string CreateAssemblyAndVerify(bool verifyAssembly)
        {
            var assembly     = this.CreateAssembly();
            var assemblyName = assembly.Builder.GetName().Name;

            assembly.Builder.Save(assemblyName + ".dll");

            if (verifyAssembly)
            {
                AssemblyVerification.Verify(assembly.Builder);
            }

            return(assemblyName);
        }
Example #5
0
        /// <summary>
        /// Verify an assembly with peverify
        /// </summary>
        /// <param name="adef">Assembly definition</param>
        public static void VerifyAssembly(AssemblyDefinition adef)
        {
            if (adef != null)
            {
                var originalLocation = adef.MainModule.Image.FileName;

                if (PEVerifyUtility.PEVerifyToolPresent)
                {
                    // We must create a temporary filename in the same path, so PEVerify can resolve dependencies
                    var tempDirectory = Path.GetDirectoryName(originalLocation) ?? string.Empty;
                    var tempFilename  = Path.Combine(tempDirectory, Path.GetRandomFileName());
                    try
                    {
                        adef.Write(tempFilename);
                        AssemblyVerification.Verify(tempFilename);
                        MessageBox.Show(@"All Classes and Methods Verified.");
                    }
                    catch (VerificationException ex)
                    {
                        using (var form = new VerifierForm())
                            form.ShowDialog(ex.Errors);
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(String.Format("Reflexil is unable to verify this assembly: {0}", ex.Message));
                    }
                    finally
                    {
                        File.Delete(tempFilename);
                    }
                }
                else
                {
                    MessageBox.Show(
                        @"Warning, PEVerify Utility (peverify.exe) not found. Update your PATH environment variable or install .NET SDK");
                }
            }
            else
            {
                MessageBox.Show(@"Assembly definition is not loaded (not a CLI image?)");
            }
        }
Example #6
0
        static MethodBaseExtensionsGetCallingConventionsTests()
        {
            var name = new AssemblyName();

            name.Name    = MethodBaseExtensionsGetCallingConventionsTests.AssemblyName;
            name.Version = new Version(1, 0, 0, 0);
            var fileName = name.Name + ".dll";

            var assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(
                name, AssemblyBuilderAccess.Save);

            var moduleBuilder = assemblyBuilder.DefineDynamicModule(name.Name, fileName, false);

            var typeName = MethodBaseExtensionsGetCallingConventionsTests.GenerateType(name, moduleBuilder);

            assemblyBuilder.Save(fileName);
            AssemblyVerification.Verify(assemblyBuilder);

            MethodBaseExtensionsGetCallingConventionsTests.Type = assemblyBuilder.GetType(typeName);
        }
        static TypeExtensionsTests()
        {
            var name = new AssemblyName();

            name.Name    = TypeExtensionsTests.AssemblyName;
            name.Version = new Version(1, 0, 0, 0);
            var fileName = name.Name + ".dll";

            var assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(
                name, AssemblyBuilderAccess.Save);

            var moduleBuilder = assemblyBuilder.DefineDynamicModule(name.Name, fileName, false);

            var typePublicName   = TypeExtensionsTests.GeneratePublicAbstractSerializableAutoType(name, moduleBuilder);
            var typeInternalName = TypeExtensionsTests.GenerateInternalSealedAnsiBeforeFieldInitType(name, moduleBuilder);

            assemblyBuilder.Save(fileName);
            AssemblyVerification.Verify(assemblyBuilder);

            TypeExtensionsTests.TypePublicAbstractSerializableAuto    = assemblyBuilder.GetType(typePublicName);
            TypeExtensionsTests.TypeInternalSealedAnsiBeforeFieldInit = assemblyBuilder.GetType(typeInternalName);
        }