示例#1
0
        private bool Rewrite(string targetFile, bool result)
        {
            var outputFile = targetFile;

            try
            {
                Log.LogMessage(MessageImportance.Normal,
                               "{0}: Adding method call interception to assembly '{1}' (Output File: {2})", GetType().Name, targetFile,
                               outputFile);

                var assembly = AssemblyDefinition.ReadAssembly(targetFile);

                var emitter = new MethodCallInterceptionEmitter();
                emitter.Rewrite(assembly);

                var parameters = new WriterParameters()
                {
                    WriteSymbols = true
                };
                assembly.Write(outputFile, parameters);

                result = true;
            }
            catch (Exception exception)
            {
                Log.LogError("Unknown error while trying to modify assembly '{0}'", targetFile);
                Log.LogErrorFromException(exception);
            }
            return(result);
        }
示例#2
0
        private static void Main(string[] args)
        {
            var options = new CommandLineOptions();

            if (!Parser.Default.ParseArguments(args, options))
            {
                return;
            }

            var targetFile = options.InputFile;

            System.Console.WriteLine("Reading assembly '{0}'", Path.GetFullPath(targetFile));

            var assembly = AssemblyDefinition.ReadAssembly(targetFile);

            // Intercept all method calls
            System.Console.WriteLine("Modifying assembly '{0}", Path.GetFullPath(targetFile));
            var emitter = new MethodCallInterceptionEmitter();

            emitter.Rewrite(assembly);

            // Save the results
            var outputFile = options.OutputFile ?? targetFile;
            var parameters = new WriterParameters {
                WriteSymbols = true
            };

            assembly.Write(outputFile, parameters);
        }
        private AssemblyDefinition RewriteAssemblyOf <T>()
        {
            var assemblyLocation   = typeof(T).Assembly.Location;
            var assemblyDefinition = AssemblyDefinition.ReadAssembly(assemblyLocation);
            var emitter            = new MethodCallInterceptionEmitter();

            emitter.Rewrite(assemblyDefinition);

            return(assemblyDefinition);
        }
示例#4
0
        public void Should_emit_valid_assembly()
        {
            var assemblyLocation   = typeof(SampleClassWithInstanceMethod).Assembly.Location;
            var assemblyDefinition = AssemblyDefinition.ReadAssembly(assemblyLocation);
            var emitter            = new MethodCallInterceptionEmitter();

            emitter.Rewrite(assemblyDefinition);

            var outputFile = "output.dll";

            assemblyDefinition.Write(outputFile);

            PEVerify(outputFile);
        }