Esempio n. 1
0
        internal void resolveReferences(MetaDataLoader loader,
                                        MetaDataTypeDefinition[] fieldOwners,
                                        MetaDataTypeDefinition[] methodOwners)
        {
            this.extends = loader.getTypeDefOrRef(this.extendsIndex);
            // fieldOwners[fieldOwners.Length-1] == null, so this is safe
            int fieldEndIndex = this.fieldIndex;

            while (fieldOwners[fieldEndIndex] == this)
            {
                loader.getField(fieldEndIndex).resolveReferences(this);
                fieldEndIndex++;
            }
            int fieldCount = fieldEndIndex - this.fieldIndex;

            this.fieldArray = loader.getFields(this.fieldIndex, fieldCount);
            // methodOwners[methodOwners.Length-1] == null, so this is safe
            int methodEndIndex = this.methodIndex;

            while (methodOwners[methodEndIndex] == this)
            {
                loader.getMethod(methodEndIndex).setParent(this);
                methodEndIndex++;
            }
            int methodCount = methodEndIndex - this.methodIndex;

            this.methodArray = loader.getMethods(this.methodIndex, methodCount);
        }
Esempio n. 2
0
        internal void resolveReferences(MetaDataLoader loader,
                                        MetaDataMethod[] paramOwners)
        {
            this.signature = signature.resolve(loader);
            // paramOwners[paramOwners.Length-1] == null, so this is safe
            int paramEndIndex = this.paramIndex;

            while (paramOwners[paramEndIndex] == this)
            {
                paramEndIndex++;
            }
            int paramCount = paramEndIndex - this.paramIndex;

            this.paramArray = loader.getParams(this.paramIndex, paramCount);
            int limit = this.paramArray.Length;

            if (paramCount != limit)
            {
                MetaDataParam resultParam = loader.getParam(this.paramIndex);
                resultParam.resolveReferences(this);
            }
            for (int i = 0; i < limit; i++)
            {
                this.paramArray[i].resolveReferences(this);
            }
        }
Esempio n. 3
0
 public static MetaData loadMetaData(String name,
                                     PELoader peLoader,
                                     bool fLoadCode,
                                     bool fLoadDebugInfo)
 {
     return(MetaDataLoader.getMetaData(name, peLoader, fLoadCode, fLoadDebugInfo));
 }
Esempio n. 4
0
 internal void loadInstructions(MetaDataLoader mdLoader,
                                PELoader peLoader,
                                Stream fileStream,
                                int[] lines,
                                int[] columns,
                                int[] offsets,
                                String srcFileName,
                                int count)
 {
     if (this.rva != 0)
     {
         if ((this.flags & (short)MethodAttributes.PinvokeImpl) == 0 ||
             (this.flags & (short)MethodAttributes.UnmanagedExport) != 0)
         {
             int codeOffset = peLoader.VaToOffset(rva);
             this.instructions =
                 Instruction.getInstructions(mdLoader, fileStream,
                                             codeOffset, lines, columns,
                                             offsets, srcFileName, count,
                                             out this.ehTable,
                                             out this.bbTable,
                                             out this.maxStack,
                                             out this.locals,
                                             out this.initLocals);
         }
         else
         {
             Console.WriteLine("Not loading embedded native code for " +
                               this);
         }
     }
 }
 // This is technically not a constructor method, but it is meant to
 // be used to set up the object
 internal void resolveReferences(MetaDataLoader loader)
 {
     // Do not resolve the typeDef, as it may live in another file!
     // this.typeDef = loader.getTypeDef(this.typeDefId);
     this.implementation =
         loader.getImplementation(this.implementationIndex);
 }
Esempio n. 6
0
        public static List <Packet> LoadPackets()
        {
            List <Packet> list     = new List <Packet>();
            MetaData      metaData = MetaDataLoader.Load();

            Grouper.GroupingSuperKeyword(metaData);
            foreach (SuperKeyword sk in metaData.superKeywords)
            {
                Packet packet = new Packet();
                if (sk.simple)
                {
                    packet.title = sk.keyword;
                }
                else if (sk.keyword == "*")
                {
                    packet.title = string.Format("【{0}】的作品集", sk.authors[0]);
                }
                else if (sk.authors[0] == "*")
                {
                    packet.title = string.Format("专题:【{0}】", sk.keyword);
                }
                else
                {
                    packet.title = string.Format("【{0}】系列", sk.keyword);
                }
                packet.author   = sk.authors[0];
                packet.simple   = sk.simple;
                packet.chapters = new List <Chapter>();
                foreach (Group g in sk.groupedTids)
                {
                    BBSThread example  = metaData.threads[g.exampleId];
                    string    filename = example.siteId + "/" + example.threadId;
                    Chapter   ch       = new Chapter();
                    ch.id        = filename;
                    ch.title     = example.title;
                    ch.author    = example.author;
                    ch.source    = Constants.SITE_DEF[example.siteId].siteName;
                    ch.savePath  = filename;
                    ch.timestamp = Utils.GetTimestamp(example.postTime);
                    packet.chapters.Add(ch);
                }
                packet.chapters.Sort((x1, x2) => x2.timestamp.CompareTo(x1.timestamp));
                packet.timestamp = packet.chapters[0].timestamp;
                packet.key       = Utils.CalcKey(packet.title, packet.author, sk.simple);
                packet.summary   = Utils.CalcSumary(packet.title, packet.author, sk.simple, packet.chapters, null);
                packet.source    = "Forum";
                list.Add(packet);
            }
            list.Sort((x1, x2) => x2.timestamp.CompareTo(x1.timestamp));
            string packetFolder = Constants.LOCAL_PATH + "packets";

            foreach (string f in Directory.EnumerateFiles(packetFolder))
            {
                Packet packet = LoadPacketFromZip(f);
                list.Add(packet);
            }
            return(list);
        }
Esempio n. 7
0
        internal override Signature resolveTypeSpec(MetaDataLoader mdLoader)
        {
            Type type = this.parseSignatureType(mdLoader);

            if (this.offset != this.buffer.Length)
            {
                throw new MetaDataLoader.IllegalMetaDataFormatException("Only read " + this.offset + " bytes of " + this);
            }
            return(new SignatureTypeSpec(type));
        }
Esempio n. 8
0
        public CldrLoader(string rootPath, CldrLoadOptions loadOptions = CldrLoadOptions.Normal)
        {
            if (File.Exists(rootPath))
            {
                _zip = ZipFile.OpenRead(rootPath);
            }
            else
            {
                DirectoryInfo info = new DirectoryInfo(rootPath);
                if (!info.Exists)
                {
                    throw new DirectoryNotFoundException(info.FullName);
                }
                rootPath = info.FullName;
                if (!Directory.Exists(Path.Combine(rootPath, "main")))
                {
                    rootPath = Path.Combine(rootPath, "common");
                    if (!Directory.Exists(Path.Combine(rootPath, "main")))
                    {
                        throw new FileLoadException("Not a valid CLDR folder");
                    }
                }
                Root = rootPath;
            }
            _scripts = XUtil.GetScriptMap();
            MetaDataLoader loader = new MetaDataLoader(this);

            using (XmlReader reader = OpenXmlFile("supplemental", "supplementalMetadata")) {
                loader.LoadMetaData(reader);
            }

            if ((loadOptions & CldrLoadOptions.Subdivision) != 0)
            {
                using (XmlReader reader = TryOpenXmlFile("supplemental", "subdivisions")) {
                    if (reader != null)
                    {
                        loader.LoadSubdivisions(reader);
                    }
                    else
                    {
                        loadOptions &= ~CldrLoadOptions.Subdivision;
                    }
                }
            }
            LoadOptions = loadOptions;

            using (XmlReader reader = OpenXmlFile("supplemental", "supplementalData")) {
                loader.Load(reader);
            }
            foreach (string name in GetAllLocaleNames())
            {
                GetLocaleInfo(name).HasFile = true;
            }
        }
Esempio n. 9
0
 // This is technically not a constructor method, but it is meant to
 // be used to set up the object
 internal void resolveReferences(MetaDataLoader loader,
                                 ArrayList[] interfaceListArray)
 {
     this.classObject     = loader.getTypeDef(this.classIndex);
     this.interfaceObject = loader.getTypeDefOrRef(this.interfaceIndex);
     if (interfaceListArray[this.classIndex] == null)
     {
         interfaceListArray[this.classIndex] = new ArrayList();
     }
     interfaceListArray[this.classIndex].Add(this.interfaceObject);
 }
Esempio n. 10
0
        private Type parseSignatureLocal(MetaDataLoader mdLoader)
        {
            ElementTypes first = (ElementTypes)this.buffer[this.offset];

            if (first == ElementTypes.PINNED)
            {
                this.offset++;
                Type type = this.parseSignatureType(mdLoader);
                return(new Type(first, type, (Modifier)null));
            }
            else
            {
                return(this.parseSignatureType(mdLoader));
            }
        }
Esempio n. 11
0
        private MetaDataObject uncompressToken(MetaDataLoader mdLoader)
        {
            uint codedToken = uncompressInt(this.buffer, ref this.offset);

            MetaDataLoader.TokenType tokenType =
                ((((codedToken & 0x2) == 0) ?
                  (((codedToken & 0x1) == 0) ?
                   MetaDataLoader.TokenType.TypeDef :
                   MetaDataLoader.TokenType.TypeRef) :
                  (((codedToken & 0x1) == 0) ?
                   MetaDataLoader.TokenType.TypeSpec :
                   MetaDataLoader.TokenType.BaseType)));
            int token = (int)(codedToken >> 2) | (int)tokenType;

            return(mdLoader.getObjectFromToken(token));
        }
Esempio n. 12
0
        internal void resolveReferences(MetaDataLoader loader,
                                        PELoader peLoader,
                                        Stream fileStream)
        {
            this.field.resolveReferences(this);
            int dataOffset = peLoader.VaToOffsetSafe(this.rva);

            if (dataOffset != -1)
            {
                fileStream.Seek(dataOffset, SeekOrigin.Begin);
                BinaryReader   reader         = new BinaryReader(fileStream);
                SignatureField fieldSignature = (SignatureField)
                                                this.field.Signature;
                Signature.Type fieldType = fieldSignature.FieldType;
                int            dataSize  = this.getFieldSize(fieldType);
                byte[]         data      = new byte[dataSize];
                int            count     = reader.Read(data, 0, dataSize);
                if (loader.HasVtableFixup() &&
                    loader.RVAHasRelocation(dataOffset) &&
                    dataSize == 4)
                {
                    // if this corresponds to a vtable label, we need to fix it
                    int location = data[0] | (data[1] << 8) |
                                   (data[2] << 16) | (data[3] << 24);
                    int imageBase = peLoader.getImageBase();
                    location -= imageBase; // use RVA
                    fileStream.Seek(location, SeekOrigin.Begin);
                    BinaryReader binaryReader = new BinaryReader(fileStream);
                    short        prefix       = binaryReader.ReadInt16();
                    if (prefix == 0x25FF) // this starts a vtable lable
                    {
                        count = binaryReader.Read(data, 0, 4);
                    }
                }
                this.dataBytes = data;

                if (count != dataSize)
                {
                    throw new MetaDataLoader.IllegalMetaDataFormatException("Only got " + count + " out of " + dataSize + " data bytes for FieldRVA " + this.rva);
                }
            }
            else
            {
                Console.WriteLine("Found no data for " + this.field);
            }
        }
        // This is technically not a constructor method, but it is meant to
        // be used to set up the object
        internal void resolveReferences(MetaDataLoader loader)
        {
            this.owner = loader.getTypeOrMethodDef(this.ownerIndex);

            if (this.owner is MetaDataTypeDefinition)
            {
                ((MetaDataTypeDefinition)this.owner).AddGenericParam(this);
            }
            else if (this.owner is MetaDataMethod)
            {
                ((MetaDataMethod)this.owner).AddGenericParam(this);
            }
            else
            {
                throw new MetaDataLoader.IllegalMetaDataFormatException
                          ("Unknown owner of GenericParam");
            }
        }
Esempio n. 14
0
        private Param parseSignatureParam(MetaDataLoader mdLoader)
        {
            Modifier modifierList = this.parseSignatureModifiers(mdLoader);
            byte     first        = this.buffer[this.offset];

            if (first == (byte)ElementTypes.BYREF)
            {
                this.offset++;
                Type type = this.parseSignatureType(mdLoader);
                return(new Param(modifierList, (ElementTypes)first, type));
            }
            else if (first == (byte)ElementTypes.TYPEDBYREF)
            {
                this.offset++;
                return(new Param(modifierList, (ElementTypes)first, null));
            }
            else
            {
                Type type = this.parseSignatureType(mdLoader);
                return(new Param(modifierList, ElementTypes.END, type));
            }
        }
Esempio n. 15
0
        private Modifier parseSignatureModifiers(MetaDataLoader mdLoader)
        {
            Modifier     result = null;
            ElementTypes mod    = (ElementTypes)this.buffer[this.offset];

            while (mod == ElementTypes.CMOD_REQD ||
                   mod == ElementTypes.CMOD_OPT)
            {
                this.offset++;
                uint typeEncoded = uncompressInt(this.buffer, ref this.offset);
                // BUGBUG: type conversion on int.
                MetaDataObject type = mdLoader.getTypeDefOrRef((int)typeEncoded);
                result = new Modifier(mod, type, result);
                if (this.offset < this.buffer.Length)
                {
                    mod = (ElementTypes)this.buffer[this.offset];
                }
                else
                {
                    mod = ElementTypes.VOID;
                }
            }
            return(result);
        }
Esempio n. 16
0
 internal void resolveReferences(MetaDataLoader loader)
 {
     this.signature = this.signature.resolve(loader);
 }
Esempio n. 17
0
 // This is technically not a constructor method, but it is meant to
 // be used to set up the object
 internal void resolveReferences(MetaDataLoader loader)
 {
     this.eventType = loader.getTypeDefOrRef(this.eventTypeIndex);
 }
Esempio n. 18
0
 // This is technically not a constructor method, but it is meant to
 // be used to set up the object
 internal void resolveReferences(MetaDataLoader loader)
 {
     this.eventObject = loader.getEvent(this.eventIndex);
 }
Esempio n. 19
0
        // Constructor Methods

        public static MetaData loadMetaData(String name,
                                            PELoader peLoader)
        {
            return(MetaDataLoader.getMetaData(name, peLoader, false, false));
        }
 // This is technically not a constructor method, but it is meant to
 // be used to set up the object
 internal void resolveReferences(MetaDataLoader loader)
 {
     this.parent = loader.getTypeDef(this.parentIndex);
     this.parent.resolveReferences(this);
 }
Esempio n. 21
0
 // This is technically not a constructor method, but it is meant to
 // be used to set up the object
 internal void resolveReferences(MetaDataLoader loader)
 {
     this.classObject = loader.getTypeDef(this.classIndex);
     this.body        = loader.getMethodDefOrRef(this.bodyIndex);
     this.declaration = loader.getMethodDefOrRef(this.declarationIndex);
 }
Esempio n. 22
0
 // This is technically not a constructor method, but it is meant to
 // be used to set up the object
 internal void resolveReferences(MetaDataLoader loader)
 {
     this.memberForwarded =
         loader.getMemberForwarded(this.memberForwardedIndex);
     this.importScope = loader.getModuleRef(this.importScopeIndex);
 }
Esempio n. 23
0
 internal void resolveReferences(MetaDataLoader loader)
 {
     this.type = this.type.resolve(loader);
 }
 // This is technically not a constructor method, but it is meant to
 // be used to set up the object
 internal void resolveReferences(MetaDataLoader loader)
 {
     this.implementation =
         loader.getImplementation(this.implementationIndex);
 }
 // This is technically not a constructor method, but it is meant to
 // be used to set up the object
 internal void resolveReferences(MetaDataLoader loader)
 {
     this.parent = loader.getHasCustomAttribute(this.parentIndex);
     this.parent.AddCustomAttribute(this);
 }
 internal void resolveReferences(MetaDataLoader loader)
 {
     this.parent = loader.getHasFieldMarshal(this.parentIndex);
 }
Esempio n. 27
0
 // This is technically not a constructor method, but it is meant to
 // be used to set up the object
 internal void resolveReferences(MetaDataLoader loader)
 {
     this.method = loader.getMethodDefOrRef(this.methodIndex);
 }
 // This is technically not a constructor method, but it is meant to
 // be used to set up the object
 internal void resolveReferences(MetaDataLoader loader)
 {
     this.parent = loader.getHasDeclSecurity(this.parentIndex);
 }
 // This is technically not a constructor method, but it is meant to
 // be used to set up the object
 internal void resolveReferences(MetaDataLoader loader)
 {
     this.classObject = loader.getMemberRefParent(this.classIndex);
     this.signature   = signature.resolve(loader);
 }
 // This is technically not a constructor method, but it is meant
 // to be used to set up the object
 internal void resolveReferences(MetaDataLoader loader)
 {
     this.resolutionScope =
         loader.getResolutionScope(this.resolutionScopeIndex);
 }