internal static async Task <CLRMetaData> GetAsync(PortableExecutableImage image, CLRHeader header) { var calc = image.GetCalculator(); var imageBase = image.NTHeaders.OptionalHeader.ImageBase; var rva = header.MetaDataAddress; var va = imageBase + rva; var offset = calc.RVAToOffset(rva); var size = header.MetaDataSize; var section = calc.RVAToSection(rva); var location = new Location(image, offset, rva, va, size, size, section); var metaDataHeader = await CLRMetaDataHeader.LoadAsync(image, location).ConfigureAwait(false); var metaDataStreamTable = await CLRMetaDataStreamTable.LoadAsync(image, metaDataHeader).ConfigureAwait(false); var metaDataStreams = await CLRMetaDataStreams.LoadAsync(image, location, metaDataStreamTable).ConfigureAwait(false); var metaData = new CLRMetaData(image, location, metaDataHeader, metaDataStreamTable, metaDataStreams); return(metaData); }