Beispiel #1
0
        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);
        }
Beispiel #2
0
 private void VerifyAssemblies()
 {
     if (!AssemblyVerifier.VerifyAssemblies(assemblyFiles))
     {
         SetInvalid();
         LogUtility.LogWarning("Incompatible assemblies found for Mod: " + name);
     }
 }
Beispiel #3
0
        /// <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));
        }
Beispiel #4
0
        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));
        }
Beispiel #5
0
        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);
        }