public Devirtualizer(EazModule module, DevirtualizeOptions options, IList<Type> fixers, ILogger logger) { this.Parent = module; this.Options = options; this.Injector = new AttributeInjector(module); this.Fixers = (fixers != null ? fixers : new List<Type>()); this.Logger = (logger != null ? logger : DummyLogger.NoThrowInstance); }
public Devirtualizer(EazModule module, DevirtualizeOptions options, IList <Type> fixers, ILogger logger) { this.Parent = module; this.Options = options; this.Injector = new AttributeInjector(module); this.Fixers = (fixers != null ? fixers : new List <Type>()); this.Logger = (logger != null ? logger : DummyLogger.NoThrowInstance); }
public DevirtualizeResults Devirtualize(DevirtualizeOptions options, Action<DevirtualizeAttempt> attemptCallback) { var methods = this.Parent.FindMethodStubs(); if (methods.Length == 0) return new DevirtualizeResults(); var attempts = new List<DevirtualizeAttempt>(); foreach (var method in methods) { var reader = new VirtualizedMethodBodyReader(method, this.Logger, this.Parent.Version); Exception exception = null, fixerException = null; try { reader.Read(); // Read method } catch (Exception e) { exception = e; } DevirtualizeAttempt attempt; if (exception == null) { var body = new CilBody( true, reader.Instructions, reader.ExceptionHandlers, reader.Locals ); method.Method.FreeMethodBody(); method.Method.Body = body; // Perform fixes try { PerformFixes(method.Method); } catch (Exception e) { fixerException = e; } if (fixerException == null) { // Inject DevirtualizedAttribute if specified if (options.HasFlag(DevirtualizeOptions.InjectAttributes)) this.Injector.InjectDevirtualized(method.Method); attempt = new DevirtualizeAttempt(method, reader, body); } else attempt = new DevirtualizeAttempt(method, reader, fixerException); } else attempt = new DevirtualizeAttempt(method, reader, exception); // Add attempt to list and fire callback attempts.Add(attempt); if (attemptCallback != null) attemptCallback(attempt); } return new DevirtualizeResults(attempts); }
public DevirtualizeResults Devirtualize(DevirtualizeOptions options) { return this.Devirtualize(options, null); }
public Devirtualizer(EazModule module, DevirtualizeOptions options, ILogger logger) : this(module, options, null, logger) { }
public Devirtualizer(EazModule module, DevirtualizeOptions options) : this(module, options, null) { }
public DevirtualizeResults Devirtualize(DevirtualizeOptions options) { return(this.Devirtualize(options, null)); }
public DevirtualizeResults Devirtualize(DevirtualizeOptions options, Action <DevirtualizeAttempt> attemptCallback) { var methods = this.Parent.FindMethodStubs(); if (methods.Length == 0) { return(new DevirtualizeResults()); } var attempts = new List <DevirtualizeAttempt>(); foreach (var method in methods) { var reader = new VirtualizedMethodBodyReader(method, this.Logger); Exception exception = null, fixerException = null; try { reader.Read(); // Read method } catch (Exception e) { exception = e; } DevirtualizeAttempt attempt; if (exception == null) { var body = new CilBody( true, reader.Instructions, reader.ExceptionHandlers, reader.Locals ); method.Method.FreeMethodBody(); method.Method.Body = body; // Perform fixes try { PerformFixes(method.Method); } catch (Exception e) { fixerException = e; } if (fixerException == null) { // Inject DevirtualizedAttribute if specified if (options.HasFlag(DevirtualizeOptions.InjectAttributes)) { this.Injector.InjectDevirtualized(method.Method); } attempt = new DevirtualizeAttempt(method, reader, body); } else { attempt = new DevirtualizeAttempt(method, reader, fixerException); } } else { attempt = new DevirtualizeAttempt(method, reader, exception); } // Add attempt to list and fire callback attempts.Add(attempt); if (attemptCallback != null) { attemptCallback(attempt); } } return(new DevirtualizeResults(attempts)); }