private static bool VerifyAssemblies() { List <string> assemblies = AssemblyUtility.GetAssemblies(assetsDirectory, AssemblyFilter.ModAssemblies); foreach (string scriptAssembly in scriptAssemblies) { string scriptAssemblyFile = Path.Combine(assemblyDirectory, scriptAssembly); if (File.Exists(scriptAssemblyFile)) { assemblies.Add(scriptAssemblyFile); } } List <string> messages = new List <string>(); AssemblyVerifier.VerifyAssemblies(assemblies, messages); foreach (var message in messages) { LogUtility.LogWarning(message); } if (messages.Count > 0) { return(false); } return(true); }
private void VerifyAssemblies() { if (!AssemblyVerifier.VerifyAssemblies(assemblyFiles)) { SetInvalid(); LogUtility.LogWarning("Incompatible assemblies found for Mod: " + name); } }
/// <summary> /// Modifies a given assembly prior to being loaded from disk. /// </summary> /// <param name="assemblyFile">The filename of the target assembly.</param> /// <returns>A valid assembly.</returns> public override Assembly Load(string assemblyFile) { var targetAssembly = AssemblyFactory.GetAssembly(assemblyFile); // Strongly-named assemblies cannot be modified if (targetAssembly.Name.HasPublicKey) { return(base.Load(assemblyFile)); } var assemblyFileName = Path.GetFileNameWithoutExtension(assemblyFile); string pdbFile = string.Format("{0}.pdb", assemblyFileName); bool hasSymbols = File.Exists(pdbFile); if (PdbLoader != null && hasSymbols) { PdbLoader.LoadSymbols(targetAssembly); } foreach (var action in AssemblyWeavers) { action(targetAssembly); // Verify the assembly at every step if (AssemblyVerifier == null) { continue; } AssemblyVerifier.Verify(targetAssembly); } var memoryStream = new MemoryStream(); if (PdbLoader != null && hasSymbols) { PdbLoader.SaveSymbols(targetAssembly); } // Save the modifed assembly AssemblyFactory.SaveAssembly(targetAssembly, memoryStream); if (PdbLoader == null || !hasSymbols) { return(targetAssembly.ToAssembly()); } var pdbBytes = File.ReadAllBytes(pdbFile); return(PdbLoader.LoadAssembly(memoryStream.ToArray(), pdbBytes)); }
private static bool VerifyAssemblies() { List <string> assemblies = AssemblyUtility.GetAssemblies(assetsDirectory, AssemblyFilter.ModAssemblies); foreach (string scriptAssembly in scriptAssemblies) { string scriptAssemblyFile = Path.Combine(assemblyDirectory, scriptAssembly); if (File.Exists(scriptAssemblyFile)) { assemblies.Add(scriptAssemblyFile); } } return(AssemblyVerifier.VerifyAssemblies(assemblies)); }
private void VerifyAssemblies() { List <string> messages = new List <string>(); AssemblyVerifier.VerifyAssemblies(assemblyFiles, messages); if (messages.Count > 0) { SetInvalid(); LogUtility.LogWarning("Incompatible assemblies found for Mod: " + name); foreach (var message in messages) { LogUtility.LogWarning(message); } } }
public static void Verify(string assemblyPath) { if (ResolvePEVerifyPath() == null) { Console.WriteLine("No PEVerify found, skipping IL verification..."); return; } var result = new AssemblyVerifier(assemblyPath, ResolvePEVerifyPath()).Verify(); result.Messages.ForEach(Console.WriteLine); if (!result.Success) { // TODO: ildasm dump // ildasm /text /tokens /caverbal <assemblyPath> if (Directory.Exists(@"C:\Temp")) { File.Copy(assemblyPath, @"C:\Temp\NRoles.mutated.dll", true); Console.WriteLine(@"SAVED ASSEMBLY: C:\Temp\NRoles.mutated.dll"); } } OperationAssert.IsSuccessful(result); }
public static ModuleDefinition WeaveTestTarget( string targetAssemblyFilename, XElement config) { Contract.Requires(config != null); Contract.Ensures(Contract.Result <ModuleDefinition>() != null); var moduleWeaver = ModuleWeaverHelper.GetModuleWeaver(targetAssemblyFilename, config); bool isVerified; string verificationOutput; AssemblyVerifier.RunVerifyProcessAndCollectOutput(moduleWeaver.AssemblyFilePath, out isVerified, out verificationOutput); Assert.That(isVerified, string.Format("Unprocessed assembly could not be verified: \n{0}", verificationOutput)); moduleWeaver.Execute(); var tempProcessedAssemblyPath = Path.Combine(Path.GetDirectoryName(moduleWeaver.AssemblyFilePath), string.Format("{0}.dll", Path.GetRandomFileName())); try { moduleWeaver.ModuleDefinition.Write(tempProcessedAssemblyPath); AssemblyVerifier.RunVerifyProcessAndCollectOutput(tempProcessedAssemblyPath, out isVerified, out verificationOutput); Assert.That(isVerified, string.Format("Processed assembly could not be verified: \n{0}", verificationOutput)); } finally { if (File.Exists(tempProcessedAssemblyPath)) { try { File.Delete(tempProcessedAssemblyPath); } catch { /* Best-effort deletion only */ } } } return(moduleWeaver.ModuleDefinition); }