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); } }
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); }
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; } }