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); }
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); }
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); }