internal static void Read(PEReader buff, TableRow[] methDefs) { MethodDef prevDef = null; prevDef = new MethodDef(buff); methDefs[0] = prevDef; for (int i=1; i < methDefs.Length; i++) { prevDef.Row = (uint)i; MethodDef methDef = new MethodDef(buff); prevDef.numPars = methDef.parIx - prevDef.parIx; prevDef = methDef; methDefs[i] = methDef; } prevDef.Row = (uint)methDefs.Length; prevDef.numPars = (buff.GetTableSize(MDTable.Param)+1) - prevDef.parIx; }
internal static void Read(PEReader buff, TableRow[] table, PEFile pefile) { for (int i=0; i < table.Length; i++) { HashAlgorithmType hAlg = (HashAlgorithmType)buff.ReadUInt32(); ushort majVer = buff.ReadUInt16(); ushort minVer = buff.ReadUInt16(); ushort bldNo = buff.ReadUInt16(); ushort revNo = buff.ReadUInt16(); uint flags = buff.ReadUInt32(); byte[] pKey = buff.GetBlob(); string name = buff.GetString(); string cult = buff.GetString(); table[i] = new Assembly(name,hAlg,majVer,minVer,bldNo,revNo,flags,pKey,cult,pefile); } }
internal InterfaceImpl(ClassDef theClass, TableRow theInterface) { this.theClass = theClass; this.theInterface = (Class)theInterface; tabIx = MDTable.InterfaceImpl; }
internal static void Read(PEReader buff, TableRow[] layouts) { for (int i=0; i < layouts.Length; i++) layouts[i] = new FieldLayout(buff); }
internal static void Read(PEReader buff, TableRow[] fRVAs) { for (int i=0; i < fRVAs.Length; i++) fRVAs[i] = new FieldRVA(buff); }
internal static void Read(PEReader buff, TableRow[] attrs) { for (int i=0; i < attrs.Length; i++) { attrs[i] = new CustomAttribute(buff); } }
internal static void Read(PEReader buff, TableRow[] events) { for (int i=0; i < events.Length; i++) events[i] = new Event(buff); }
internal static void Read(PEReader buff, TableRow[] props) { for (int i=0; i < props.Length; i++) props[i] = new Property(buff); }
internal static void Read(PEReader buff, TableRow[] sigs) { for (int i=0; i < sigs.Length; i++) { uint sigIx = buff.GetBlobIx(); uint tag = buff.FirstBlobByte(sigIx); if (tag == LocalSig.LocalSigByte) sigs[i] = new LocalSig(sigIx); else if (tag == Field.FieldTag) sigs[i] = new Signature(sigIx); else sigs[i] = new CalliSig(sigIx); sigs[i].Row = (uint)i+1; } }
internal static void Read(PEReader buff, TableRow[] mods, bool resolve) { for (int i=0; i < mods.Length; i++) { string name = buff.GetString(); ModuleRef mRef = new ModuleRef(name); if (resolve) mRef.modFile = buff.GetFileDesc(name); mods[i] = mRef; } }
internal static void Read(PEReader buff, TableRow[] pars) { for (int i=0; i < pars.Length; i++) pars[i] = new Param(buff); }
internal static void Read(PEReader buff, TableRow[] specs) { for (int i=0; i < specs.Length; i++) specs[i] = new MethodSpec(buff); }
internal static void Read(PEReader buff, TableRow[] methSems) { for (int i=0; i < methSems.Length; i++) methSems[i] = new MethodSemantics(buff); }
internal static void Read(PEReader buff, TableRow[] table) { for (int i=0; i < table.Length; i++) table[i] = Read(buff); }
internal static void Read(PEReader buff, TableRow[] typeDefs, bool isMSCorLib) { ClassDef prevDef = null; prevDef = new ClassDef(buff,1,isMSCorLib); typeDefs[0] = prevDef; for (int i=1; i < typeDefs.Length; i++) { ClassDef typeDef = new ClassDef(buff,(uint)i+1,isMSCorLib); prevDef.fieldEndIx = typeDef.fieldIx; prevDef.methodEndIx = typeDef.methodIx; prevDef = typeDef; typeDefs[i] = typeDef; } prevDef.fieldEndIx = buff.GetTableSize(MDTable.Field)+1; prevDef.methodEndIx = buff.GetTableSize(MDTable.Method)+1; }
internal static void Read(PEReader buff, TableRow[] specs) { for (int i=0; i < specs.Length; i++) { specs[i] = new UnresolvedTypeSpec(buff,i); //specs[i] = buff.GetBlobType(null,null,buff.GetBlobIx()); //if (specs[i] is GenericParam) { // Console.WriteLine("GenericParam in TypeSpec table at pos " + i); //} } }
internal static void Read(PEReader buff, TableRow[] typeRefs, bool resolve) { for (uint i=0; i < typeRefs.Length; i++) { uint resScopeIx = buff.GetCodedIndex(CIx.ResolutionScope); string name = buff.GetString(); string nameSpace = buff.GetString(); if (buff.CodedTable(CIx.ResolutionScope,resScopeIx) == MDTable.TypeRef) typeRefs[i] = new NestedClassRef(resScopeIx,nameSpace,name); else typeRefs[i] = new ClassRef(resScopeIx,nameSpace,name); typeRefs[i].Row = i+1; } if (resolve) { for (int i=0; i < typeRefs.Length; i++) { ((ClassRef)typeRefs[i]).ResolveParent(buff,false); } } }
internal static void Read(PEReader buff, TableRow[] consts) { for (int i=0; i < consts.Length; i++) consts[i] = new ConstantElem(buff); }
internal static void Read(PEReader buff, TableRow[] secs) { for (int i=0; i < secs.Length; i++) secs[i] = new DeclSecurity(buff); }
internal static void GetClassRefs(PEReader buff, TableRow[] eClasses) { for (uint i=0; i < eClasses.Length; i++) { uint junk = buff.ReadUInt32(); junk = buff.ReadUInt32(); string name = buff.GetString(); string nameSpace = buff.GetString(); uint implIx = buff.GetCodedIndex(CIx.Implementation); eClasses[i] = new ClassRef(implIx,nameSpace,name); eClasses[i].Row = i+1; } }
internal static void Read(PEReader buff, TableRow[] fields) { for (int i=0; i < fields.Length; i++) fields[i] = new FieldDef(buff); }
internal static void Read(PEReader buff, TableRow[] eClasses) { for (int i=0; i < eClasses.Length; i++) eClasses[i] = new ExternClass(buff); }
internal static void Read(PEReader buff, TableRow[] fMarshal) { for (int i=0; i < fMarshal.Length; i++) fMarshal[i] = new FieldMarshal(buff); }
internal MetaDataTables(TableRow[][] tabs) { tables = tabs; }
internal static void Read(PEReader buff, TableRow[] files) { for (int i=0; i < files.Length; i++) { uint flags = buff.ReadUInt32(); if (flags == HasMetaData) files[i] = new ModuleFile(buff.GetString(),buff.GetBlob()); else files[i] = new ResourceFile(buff.GetString(),buff.GetBlob()); } }
private void ReadTildeStreamStart() { if (Diag.DiagOn) Console.WriteLine("Reading meta data tables at offset = " + Hex.Int((int)BaseStream.Position)); // pre: at beginning of tilde stream ReadZeros(4); // reserved verInfo.tsMajVer = ReadByte(); // check verInfo.tsMinVer = ReadByte(); // check byte heapSizes = ReadByte(); if (heapSizes != 0) { md.largeStrings = (heapSizes & 0x01) != 0; md.largeGUID = (heapSizes & 0x02) != 0; md.largeBlob = (heapSizes & 0x04) != 0; } if (Diag.DiagOn) { if (md.largeStrings) Console.WriteLine("LARGE strings index"); if (md.largeGUID) Console.WriteLine("LARGE GUID index"); if (md.largeBlob) Console.WriteLine("LARGE blob index"); } int res = ReadByte(); // check if 1 ulong valid = ReadUInt64(); ulong sorted = this.ReadUInt64(); if (Diag.DiagOn) Console.WriteLine("Valid = " + Hex.Long(valid)); for (int i=0; i < MetaData.NumMetaDataTables; i++) { if ((valid & FileImage.bitmasks[i]) != 0) { tableLengths[i] = ReadUInt32(); tables[i] = new TableRow[tableLengths[i]]; md.largeIx[i] = tableLengths[i] > MetaData.maxSmlIxSize; if (Diag.DiagOn) Console.WriteLine("Table Ix " + Hex.Short(i) + " has length " + tableLengths[i]); } else tableLengths[i] = 0; } if (tableLengths[0] != 1) this.MetaDataError("Module table has more than one entry"); for (int i=0; i < MetaData.CIxTables.Length; i++) { for (int j=0; j < MetaData.CIxTables[i].Length; j++) { if (Diag.DiagOn) Console.WriteLine("CIxTables " + i + " " + j + " tableLength = " + tableLengths[MetaData.CIxTables[i][j]] + " Max = " + MetaData.CIxMaxMap[i]); md.lgeCIx[i] = md.lgeCIx[i] || (tableLengths[MetaData.CIxTables[i][j]] > MetaData.CIxMaxMap[i]); } if (Diag.DiagOn) if (md.lgeCIx[i]) Console.WriteLine("LARGE CIx " + i ); } }
internal static void Read(PEReader buff, TableRow[] gpars) { for (int i=0; i < gpars.Length; i++) gpars[i] = new GenericParamConstraint(buff); }
internal static void GetClassRefs(PEReader buff, TableRow[] typeRefs, ReferenceScope paren, uint[] parIxs) { int num = typeRefs.Length; uint[] fieldStart = new uint[num+1], methStart = new uint[num+1], extends = new uint[num+1]; for (int i=0; i < num; i++) { uint flags = buff.ReadUInt32(); string name = buff.GetString(); string nameSpace = buff.GetString(); extends[i] = buff.GetCodedIndex(CIx.TypeDefOrRef); fieldStart[i] = buff.GetIndex(MDTable.Field); methStart[i] = buff.GetIndex(MDTable.Method); //Console.WriteLine("flags = " + Hex.Int(flags)); if (i == 0) // ASSERT first entry is always <Module> typeRefs[i] = paren.GetDefaultClass(); else if (isPublic(flags)) { if (parIxs[i] != 0) { typeRefs[i] = new NestedClassRef(paren,nameSpace,name); } else { typeRefs[i] = paren.GetExistingClass(nameSpace,name); if (typeRefs[i] == null) { typeRefs[i] = new ClassRef(paren,nameSpace,name); paren.AddToClassList((ClassRef)typeRefs[i]); } } } } fieldStart[num] = buff.GetTableSize(MDTable.Field)+1; methStart[num] = buff.GetTableSize(MDTable.Method)+1; // Find Nested Classes for (int i=0; i < typeRefs.Length; i++) { if ((typeRefs[i] != null) && (typeRefs[i] is NestedClassRef)) { NestedClassRef nRef = (NestedClassRef)typeRefs[i]; ClassRef nPar = (ClassRef)typeRefs[parIxs[i]-1]; if (nPar == null) { // parent is private, so ignore typeRefs[i] = null; } else { nRef.SetParent(nPar); nPar.AddToClassList(nRef); } } if (typeRefs[i] != null) { if (buff.GetCodedElement(CIx.TypeDefOrRef,extends[i]) == MSCorLib.mscorlib.ValueType()) ((ClassRef)typeRefs[i]).MakeValueClass(); buff.SetElementPosition(MDTable.Field,fieldStart[i]); FieldDef.GetFieldRefs(buff,fieldStart[i+1]-fieldStart[i],(ClassRef)typeRefs[i]); buff.SetElementPosition(MDTable.Method,methStart[i]); MethodDef.GetMethodRefs(buff,methStart[i+1]-methStart[i],(ClassRef)typeRefs[i]); } } }
internal static void Read(PEReader buff, TableRow[] impls) { for (int i=0; i < impls.Length; i++) impls[i] = new InterfaceImpl(buff); }
internal static void ReadMember(PEReader buff, TableRow[] members) { for (int i=0; i < members.Length; i++) { uint parenIx = buff.GetCodedIndex(CIx.MemberRefParent); string memName = buff.GetString(); uint sigIx = buff.GetBlobIx(); if (buff.FirstBlobByte(sigIx) == Field.FieldTag) // got a field members[i] = new FieldRef(parenIx,memName,sigIx); else members[i] = new MethodRef(parenIx,memName,sigIx); } }