Пример #1
0
 public static bool IsAssembly(IBinarySource source)
 {
     try
     {
         var pe       = new PEImage(source, false);
         var metadata = MemoryMappedMetadata.Load(pe);
         return(metadata.GetTableRowCount(Metadata.MetadataTableType.Assembly) > 0);
     }
     catch (Exception)
     {
         return(false);
     }
 }
Пример #2
0
        public static AssemblyReference GetAssemblyName(PEImage pe)
        {
            var metadata = MemoryMappedMetadata.Load(pe);

            AssemblyRow row;

            metadata.GetAssembly(1, out row);

            var assemblyRef = new AssemblyReference();

            assemblyRef._name    = metadata.GetString(row.Name);
            assemblyRef._culture = metadata.GetString(row.Locale);
            assemblyRef._processorArchitecture = (ProcessorArchitecture)((int)(row.Flags & AssemblyFlags.PA_Mask) >> (int)AssemblyFlags.PA_Shift);
            assemblyRef._version = new Version(row.MajorVersion, row.MinorVersion, row.BuildNumber, row.RevisionNumber);

            var publicKey = metadata.GetBlob(row.PublicKey);

            if (publicKey != null && publicKey.Length > 0)
            {
                assemblyRef._publicKeyToken = StrongNameUtils.CreateTokenFromPublicKey(publicKey);
            }

            return(assemblyRef);
        }
Пример #3
0
        private void LoadImage()
        {
            PEImage pe = null;

            try
            {
                pe = PEImage.LoadFile(_location, _assemblyManager.FileLoadMode);

                CorHeader corHeader;
                var       metadata = MemoryMappedMetadata.Load(pe, out corHeader);

                _image = new ModuleImage(this, pe, metadata, corHeader);
            }
            catch (Exception)
            {
                if (pe != null)
                {
                    pe.Dispose();
                    pe = null;
                }

                throw;
            }
        }