protected override void LoadInternal(VirtualReader rdr) { s = rdr.ReadUInt32(); maVer = rdr.ReadUInt16(); miVer = rdr.ReadUInt16(); dats = new CLRDatas(this); dats.IsLoading = true; Rva mdAdr = rdr.ReadRva(); uint mdSze = rdr.ReadUInt32(); f = (RuntimeFlags)rdr.ReadUInt32(); if ((f & RuntimeFlags.NativeEntryPoint) == RuntimeFlags.NativeEntryPoint) { Rva ep = rdr.ReadRva(); rdr.SaveLocation(); rdr.SetPosition(ep); byte[] ec = NativeHelper.GetNativeCodes(rdr); rdr.LoadLocation(); e = ep; dats.Add(new CLRData() { Address = ep, Data = ec }); } else { t = rdr.ReadUInt32(); } Rva resAdr = rdr.ReadRva(); uint resSze = rdr.ReadUInt32(); Rva snAdr = rdr.ReadRva(); uint snSze = rdr.ReadUInt32(); Rva cmAdr = rdr.ReadRva(); uint cmSze = rdr.ReadUInt32(); Rva vtAdr = rdr.ReadRva(); uint vtSze = rdr.ReadUInt32(); Rva eatAdr = rdr.ReadRva(); uint eatSze = rdr.ReadUInt32(); Rva mnAdr = rdr.ReadRva(); uint mnSze = rdr.ReadUInt32(); rdr.SetPosition(resAdr); res = rdr.ReadBytes((int)resSze); rdr.SetPosition(snAdr); sn = rdr.ReadBytes((int)snSze); rdr.SetPosition(cmAdr); cm = rdr.ReadBytes((int)cmSze); rdr.SetPosition(eatAdr); eat = rdr.ReadBytes((int)eatSze); rdr.SetPosition(mnAdr); mn = rdr.ReadBytes((int)mnSze); vt = new VTableFixups(this); vt.Load(rdr, vtAdr, vtSze); md = new MetadataRoot(this); md.Load(rdr, mdAdr); dats.IsLoading = false; // Save the read info MetadataDirEntry = new CLRDataDirectoryEntry("MetaData", mdAdr, mdSze); ResourceDirEntry = new CLRDataDirectoryEntry("Resources", resAdr, resSze); StrongNameDirEntry = new CLRDataDirectoryEntry("Strong Name Signature", snAdr, snSze); CodeManagerTableDirEntry = new CLRDataDirectoryEntry("Code Manager Table", cmAdr, cmSze); VTableFixupsDirEntry = new CLRDataDirectoryEntry("VTable Fixups", vtAdr, vtSze); ExportAddressTableJumpsDirEntry = new CLRDataDirectoryEntry("Export Address Table Jumps", eatAdr, eatSze); ManagedNativeHeaderDirEntry = new CLRDataDirectoryEntry("Managed Native Header", mnAdr, mnSze); }