Beispiel #1
0
 internal FieldLayout(PEReader buff)
 {
     offset = buff.ReadUInt32();
     fieldIx = buff.GetIndex(MDTable.Field);
     tabIx = MDTable.FieldLayout;
 }
Beispiel #2
0
 internal FieldRVA(PEReader buff)
 {
     rva = buff.ReadUInt32();
     fieldIx = buff.GetIndex(MDTable.Field);
     tabIx = MDTable.FieldRVA;
 }
Beispiel #3
0
 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]);
         }
     }
 }
Beispiel #4
0
 internal static ClassRef ReadDef(PEReader buff, ReferenceScope resScope, uint index)
 {
     uint junk = buff.ReadUInt32();
     string cName = buff.GetString();
     string nsName = buff.GetString();
     ClassRef newClass = (ClassRef)resScope.GetExistingClass(nsName,cName);
     if (newClass == null) {
         newClass = new ClassRef(resScope,nsName,cName);
         resScope.AddToClassList(newClass);
     }
     newClass.readAsDef = true;
     newClass.Row = index;
     junk = buff.GetCodedIndex(CIx.TypeDefOrRef);
     newClass.fieldIx = buff.GetIndex(MDTable.Field);
     newClass.methodIx = buff.GetIndex(MDTable.Method);
     return newClass;
 }
Beispiel #5
0
 internal MethodDef(PEReader buff)
     : base(null)
 {
     rva = buff.ReadUInt32();
     implFlags = buff.ReadUInt16();
     methFlags = buff.ReadUInt16();
     name = buff.GetString();
     sigIx = buff.GetBlobIx();
     parIx = buff.GetIndex(MDTable.Param);
     tabIx = MDTable.Method;
 }
Beispiel #6
0
 internal ClassDef(PEReader buff, uint row, bool isMSCorLib)
 {
     flags = buff.ReadUInt32();
     name = buff.GetString();
     nameSpace = buff.GetString();
     extendsIx = buff.GetCodedIndex(CIx.TypeDefOrRef);
     fieldIx = buff.GetIndex(MDTable.Field);
     methodIx = buff.GetIndex(MDTable.Method);
     this.Row = row;
     tabIx = MDTable.TypeDef;
     if (isMSCorLib && (name == "ValueType"))
         typeIndex = (byte)ElementType.ValueType;
 }
Beispiel #7
0
 public ExternClass(PEReader buff)
 {
     flags = buff.ReadUInt32();
     typeDefId = buff.ReadUInt32();
     name = buff.GetString();
     nameSpace = buff.GetString();
     implIx = buff.GetCodedIndex(CIx.Implementation);
     tabIx = MDTable.ExportedType;
 }
Beispiel #8
0
 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);
     }
 }
Beispiel #9
0
 internal ClassLayout(PEReader buff)
 {
     packSize = buff.ReadUInt16();
     classSize = buff.ReadUInt32();
     parentIx = buff.GetIndex(MDTable.TypeDef);
     tabIx = MDTable.ClassLayout;
 }
Beispiel #10
0
 internal static ClassLayout FindLayout(PEReader buff, ClassDef paren, uint classIx)
 {
     buff.SetElementPosition(MDTable.ClassLayout,0);
     for (int i=0; i < buff.GetTableSize(MDTable.ClassLayout); i++) {
         ushort packSize = buff.ReadUInt16();
         uint classSize = buff.ReadUInt32();
         if (buff.GetIndex(MDTable.TypeDef) == classIx)
             return new ClassLayout(packSize,classSize,paren);
     }
     return null;
 }
Beispiel #11
0
 internal NullRefConst(PEReader buff)
 {
     uint junk = buff.ReadUInt32();
     size = 4;
     type = ElementType.Class;
 }
Beispiel #12
0
 internal static void GetMethodRefs(PEReader buff, uint num, ClassRef parent)
 {
     for (int i=0; i < num; i++) {
         uint rva = buff.ReadUInt32();
         ushort implFlags = buff.ReadUInt16();
         ushort methFlags = buff.ReadUInt16();
         string name = buff.GetString();
         uint sigIx = buff.GetBlobIx();
         uint parIx = buff.GetIndex(MDTable.Param);
         if (IsPublicOrProtected(methFlags)) {
             MethodRef mRef = new MethodRef(parIx,name,sigIx);  // changed
             mRef.SetParent(parent);
             //Console.WriteLine(parent.NameString());
             MethSig mSig = buff.ReadMethSig(mRef,name,sigIx);
             //mSig.name = name;
             mRef.SetSig(mSig); // changed
             parent.AddToMethodList(mRef);
             //if (parent.GetMethod(mSig) == null) {
             //  MethodRef mRef = new MethodRef(mSig);
             //  parent.AddToMethodList(mRef);
             //}
         }
     }
 }
Beispiel #13
0
 internal static AssemblyRef Read(PEReader buff)
 {
     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();
     byte[] hBytes = buff.GetBlob();
     AssemblyRef assemRef;
     if (name.ToLower() == "mscorlib") {
         assemRef = MSCorLib.mscorlib;
         assemRef.AddVersionInfo(majVer,minVer,bldNo,revNo);
         assemRef.AddHash(hBytes);
         if (pKey.Length > 8) assemRef.AddKey(pKey);
         else assemRef.AddKeyToken(pKey);
         assemRef.AddCulture(cult);
         assemRef.SetFlags(flags);
     } else {
         assemRef = new AssemblyRef(name,majVer,minVer,bldNo,revNo,flags,pKey,cult,hBytes);
     }
     return assemRef;
 }
Beispiel #14
0
 internal FileRef(PEReader buff)
 {
     flags = buff.ReadUInt32();
     name = buff.GetString();
     hashBytes = buff.GetBlob();
     tabIx = MDTable.File;
 }
Beispiel #15
0
 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;
     }
 }
Beispiel #16
0
 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());
     }
 }
Beispiel #17
0
 internal Section(PEReader input)
 {
     name = new char[8];
     for (int i=0; i < name.Length; i++)
         name[i] = (char)input.ReadByte();
     nameString = new String(name);
     tide = input.ReadUInt32();
     rva = input.ReadUInt32();
     size = input.ReadUInt32();
     offset = input.ReadUInt32();
     relocRVA = input.ReadUInt32();
     lineRVA = input.ReadUInt32();
     numRelocs = input.ReadUInt16();
     numLineNums = input.ReadUInt16();
     flags = input.ReadUInt32();
     if (Diag.DiagOn) {
         Console.WriteLine("  " + nameString + " RVA = " + Hex.Int(rva) + "  vSize = " + Hex.Int(tide));
         Console.WriteLine("        FileOffset = " + Hex.Int(offset) + "  aSize = " + Hex.Int(size));
     }
 }
Beispiel #18
0
 internal static AssemblyRef ReadAssemblyRef(PEReader buff)
 {
     buff.SetElementPosition(MDTable.Assembly,1);
     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();
     AssemblyRef assemRef = null;
     if (name.ToLower() == "mscorlib") {
         assemRef = MSCorLib.mscorlib;
         assemRef.AddVersionInfo(majVer,minVer,bldNo,revNo);
         if (pKey.Length > 8) assemRef.AddKey(pKey);
         else assemRef.AddKeyToken(pKey);
         assemRef.AddCulture(cult);
         assemRef.SetFlags(flags);
     } else {
         assemRef = new AssemblyRef(name,majVer,minVer,bldNo,revNo,flags,pKey,cult,null);
     }
     //AssemblyRef assemRef = new AssemblyRef(name,majVer,minVer,bldNo,revNo,flags,pKey,cult,null);
     assemRef.ReadAsDef();
     return assemRef;
 }
Beispiel #19
0
 internal ManifestResource(PEReader buff)
 {
     fileOffset = buff.ReadUInt32();
     flags = buff.ReadUInt32();
     mrName = buff.GetString();
     implIx = buff.GetCodedIndex(CIx.Implementation);
     tabIx = MDTable.ManifestResource;
 }