Exemple #1
0
        private Assembly LoadAssembly(PEReader pe, AssemblyName name = null)
        {
            MetadataReader reader = pe.GetMetadataReader();

            if (!reader.IsAssembly)
            {
                throw new InvalidDataException("Specified assembly must be an assembly!");
            }

            if (name != null && !AsmNameComparer.Equals(name, reader.GetAssemblyDefinition().GetAssemblyName()))
            {
                throw new ArgumentException("Resolved assembly doesn't match the embedded assembly name!");
            }

            name = reader.GetAssemblyDefinition().GetAssemblyName();

            if (_key_pairs.TryGetValue(new ByteData(name.GetPublicKey()), out StrongNameKeyPair kp))
            {
                name.KeyPair = kp;
            }

            name.SetPublicKey(null);

            AssemblyTracker tracker = new AssemblyTracker(name);

            BuildReferences(reader, tracker);



            return(null);
        }
Exemple #2
0
        private void BuildReferences(MetadataReader reader, AssemblyTracker tracker)
        {
            foreach (AssemblyReferenceHandle _handle in reader.AssemblyReferences)
            {
                AssemblyName reference = reader.GetAssemblyReference(_handle).GetAssemblyName();

                if (_loaded.TryGetValue(reference, out Assembly asm))
                {
                    tracker.AddRef(asm);
                }
                else
                {
                    tracker.AddRef(LoadAssembly(reference));
                }
            }
        }
Exemple #3
0
 public ModuleTracker(AssemblyTracker tracker, ModuleBuilder moduleBuilder)
 {
     Assembly = tracker;
     _mod     = moduleBuilder;
 }