Esempio n. 1
0
        public void RemoveFromMethodInfo(string methodName, ProjectItem projectItem)
        {
            string filePath = projectItem.FileNames[0];
            int    index    = filePath.IndexOf(serverMethodsFolderName);

            if (index == 1)
            {
                return;
            }

            string partialPath = filePath.Substring(index + serverMethodsFolderName.Length + 1);

            partialPath = Path.ChangeExtension(partialPath, null);

            string fodlerPath = methodName + "\\";


            if (fodlerPath == partialPath)
            {
                MethodInfos.RemoveAll(x => x.MethodName == methodName);
                return;
            }
            MethodInfo methodInfos = this.MethodInfos.FirstOrDefault(m => m.MethodName == methodName);

            List <string> classesForRemoving = new List <string>();

            foreach (var partialClass in methodInfos.PartialClasses)
            {
                if (partialClass.IndexOf(partialPath) == 0)
                {
                    classesForRemoving.Add(partialClass);
                }
            }
            classesForRemoving.ForEach(cfr => methodInfos.PartialClasses.Remove(cfr));
        }
Esempio n. 2
0
        public override void EnterClass_body(CSharpParser.Class_bodyContext context)
        {
            Console.WriteLine();
            Console.WriteLine(context.GetText());

            foreach (var classMemberDeclaration in context.class_member_declarations().class_member_declaration())
            {
                var typedMemberDeclarationListener = new TypedMemberDeclarationListener(_className);
                classMemberDeclaration.common_member_declaration().typed_member_declaration().EnterRule(typedMemberDeclarationListener);

                if (typedMemberDeclarationListener.MethodInfo != null)
                {
                    MethodInfos.Add(typedMemberDeclarationListener.MethodInfo);
                }

                if (typedMemberDeclarationListener.FieldInfo != null)
                {
                    FieldInfos.Add(typedMemberDeclarationListener.FieldInfo);
                }

                /*Console.WriteLine();
                 * Console.WriteLine(classMemberDeclaration.attributes().GetText());
                 * Console.WriteLine();
                 * Console.WriteLine(classMemberDeclaration.all_member_modifiers().GetText());
                 * Console.WriteLine(classMemberDeclaration.common_member_declaration().GetText());*/
            }
        }
        DumpedMethods decryptMethods()
        {
            var dumpedMethods = new DumpedMethods();

            var peImage = decrypterInfo.peImage;
            var methodInfos = new MethodInfos(decrypterInfo.mainType, peImage, decrypterInfo.peHeader, decrypterInfo.mcKey);
            methodInfos.initializeInfos();

            var methodDef = peImage.DotNetFile.MetaData.TablesStream.MethodTable;
            for (uint rid = 1; rid <= methodDef.Rows; rid++) {
                var dm = new DumpedMethod();
                peImage.readMethodTableRowTo(dm, rid);

                var info = methodInfos.lookup(dm.mdRVA);
                if (info == null)
                    continue;

                ushort magic = peImage.readUInt16(dm.mdRVA);
                if (magic != 0xFFF3)
                    continue;

                var mbHeader = MethodBodyParser.parseMethodBody(MemoryImageStream.Create(info.body), out dm.code, out dm.extraSections);
                peImage.updateMethodHeaderInfo(dm, mbHeader);

                dumpedMethods.add(dm);
            }

            return dumpedMethods;
        }
Esempio n. 4
0
        IEnumerable <BaseTypeSyntax> GetBaseTypes()
        {
            var opaqueTypeName = Element.Attribute(gs + "opaque")?.Value;

            if (opaqueTypeName != null)
            {
                switch (opaqueTypeName)
                {
                case "ref-counted":
                    opaqueTypeName = typeof(GISharp.Runtime.ReferenceCountedOpaque).FullName;
                    break;

                case "owned":
                    opaqueTypeName = typeof(GISharp.Runtime.OwnedOpaque).FullName;
                    break;

                case "static":
                    opaqueTypeName = typeof(GISharp.Runtime.StaticOpaque).FullName;
                    break;

                case "gtype-struct":
                    opaqueTypeName = GTypeStructParent.FullName;
                    break;

                default:
                    var message = string.Format("Unknown oqaue type '{0}.", opaqueTypeName);
                    throw new Exception(message);
                }
                yield return(SimpleBaseType(ParseTypeName(opaqueTypeName)));
            }
            if (IsGObject)
            {
                var parent = Element.Attribute("parent")?.Value;
                if (parent == null)
                {
                    yield return(SimpleBaseType(
                                     ParseTypeName(typeof(GISharp.Runtime.ReferenceCountedOpaque).FullName)));
                }
                else
                {
                    var parentType = GirType.ResolveType(parent, Element.Document);
                    yield return(SimpleBaseType(ParseTypeName(parentType.FullName)));
                }
                // TODO: add interfaces for objects
            }
            if (MethodInfos.Any(x => x.IsEquals))
            {
                var typeName = string.Concat(typeof(IEquatable <>).FullName.TakeWhile(x => x != '`'));
                typeName = string.Format("{0}<{1}>", typeName, ManagedName);
                yield return(SimpleBaseType(ParseTypeName(typeName)));
            }
            if (MethodInfos.Any(x => x.IsCompare))
            {
                var typeName = string.Concat(typeof(IComparable <>).FullName.TakeWhile(x => x != '`'));
                typeName = string.Format("{0}<{1}>", typeName, ManagedName);
                yield return(SimpleBaseType(ParseTypeName(typeName)));
            }
        }
Esempio n. 5
0
 public static AppScreenException NonVirtualMethods(MethodInfos methodInfos)
 {
     StringBuilder messageBuilder = new StringBuilder();
     methodInfos.ForEach(delegate(MethodInfo entity)
                          {
                              string message = string.Format("{0} method in class {1} is not virtual", entity.Name, entity.DeclaringType.Name);
                              messageBuilder.AppendLine(message);
                          });
     return new AppScreenException(messageBuilder.ToString());
 }
Esempio n. 6
0
        public static AppScreenException NonVirtualMethods(MethodInfos methodInfos)
        {
            StringBuilder messageBuilder = new StringBuilder();

            methodInfos.ForEach(delegate(MethodInfo entity)
            {
                string message = string.Format("{0} method in class {1} is not virtual", entity.Name, entity.DeclaringType.Name);
                messageBuilder.AppendLine(message);
            });
            return(new AppScreenException(messageBuilder.ToString()));
        }
Esempio n. 7
0
 public void CleanUp()
 {
     LastSelectedDir    = string.Empty;
     LastSelectedMfFile = string.Empty;
     UseVSFormatting    = default(bool);
     LastSelectedSearchTypeInOpenFromPackage = string.Empty;
     Connections.Clear();
     MethodInfos.Clear();
     LastSavedSearch.Clear();
     MethodsFolderPath = string.Empty;
     MethodConfigPath  = string.Empty;
     IOMFilePath       = string.Empty;
 }
Esempio n. 8
0
        private int FindIndex(MethodInfo methodInfo)
        {
            string name = methodInfo.Name;

            MethodInfo[] methodInfoArray = MethodInfos
                                           .Where(info => info.Name == name)
                                           .ToArray();
            return(methodInfoArray.Length == 1 ? 0 :
                   methodInfoArray
                   .Select((info, index) => (info, index))
                   .Where(tuple => tuple.info == methodInfo)
                   .Select(tuple => tuple.index)
                   .FirstOrDefault());
        }
        public List <string> GetOverLoadList()
        {
            if (MethodInfos.Any())
            {
                return(MethodInfos
                       .ToList()
                       .Select(x => x.MethodInfo.MethodSignature() + "\r\n\r\n" + new XmlCommentsHelper().GetMethodComments(x.MethodInfo))
                       .ToList());
            }

            return(ConstructorInfos
                   .ToList()
                   .Select(x => x.ConstructorInfo.ConstructorSignature() + "\r\n\r\n" + new XmlCommentsHelper().GetConstructorComments(x.ConstructorInfo))
                   .ToList());
        }
Esempio n. 10
0
 internal MemberInfoList(Type interfaceType)
 {
     MemberInfo[] membersInfos = interfaceType
                                 .GetAllTypes()
                                 .SelectMany(type => type.GetMembers())
                                 .ToArray();
     PropertyInfos = membersInfos
                     .OfType <PropertyInfo>()
                     .ToArray();
     MethodInfos = membersInfos
                   .OfType <MethodInfo>()
                   .Where(methodInfo => !methodInfo.IsSpecialName)
                   .ToArray();
     MethodIndexes = MethodInfos
                     .ToDictionary(
         methodInfo => methodInfo,
         FindIndex);
     EventInfos = membersInfos
                  .OfType <EventInfo>()
                  .ToArray();
 }
Esempio n. 11
0
        IEnumerable <MemberDeclarationSyntax> GetClassMemberDeclarations()
        {
            foreach (var d in NestedTypeInfos.SelectMany(x => x.Declarations))
            {
                yield return(d);
            }
            foreach (var d in FieldInfos.SelectMany(x => x.Declarations))
            {
                yield return(d);
            }
            if (HasDefaultConstructor)
            {
                yield return(DefaultConstructor);
            }
            if (IsGTypeStruct)
            {
                // taking advantage of the face that interfaces can't inherit,
                // so parent will always be GISharp.GObject.TypeInterface for
                // interfaces.
                if (GTypeStructParent == typeof(GISharp.GObject.TypeInterface))
                {
                    yield return(GetGTypeStructCreateInterfaceInfoMethod());

                    yield return(GetGTypeStructInterfaceInitMethod());

                    foreach (var m in GetGTypeInterfaceMethodImpls())
                    {
                        yield return(m);
                    }
                }
                else
                {
                    yield return(GetGTypeStructGetInfoMethod());
                }
            }
            foreach (var d in MethodInfos.SelectMany(x => x.Declarations))
            {
                yield return(d);
            }
        }
Esempio n. 12
0
        DumpedMethods DecryptMethods()
        {
            var dumpedMethods = new DumpedMethods();

            var peImage     = decrypterInfo.peImage;
            var methodInfos = new MethodInfos(module, decrypterInfo.mainType, peImage, decrypterInfo.peHeader, decrypterInfo.mcKey);

            methodInfos.InitializeInfos();

            var methodDef = peImage.Metadata.TablesStream.MethodTable;

            for (uint rid = 1; rid <= methodDef.Rows; rid++)
            {
                var dm = new DumpedMethod();
                peImage.ReadMethodTableRowTo(dm, rid);

                var info = methodInfos.Lookup(dm.mdRVA);
                if (info == null)
                {
                    continue;
                }

                ushort magic = peImage.ReadUInt16(dm.mdRVA);
                if (magic != 0xFFF3)
                {
                    continue;
                }

                var bodyReader = ByteArrayDataReaderFactory.CreateReader(info.body);
                var mbHeader   = MethodBodyParser.ParseMethodBody(ref bodyReader, out dm.code, out dm.extraSections);
                peImage.UpdateMethodHeaderInfo(dm, mbHeader);

                dumpedMethods.Add(dm);
            }

            return(dumpedMethods);
        }
Esempio n. 13
0
        DumpedMethods decryptMethods()
        {
            var dumpedMethods = new DumpedMethods();

            var peImage     = decrypterInfo.peImage;
            var methodInfos = new MethodInfos(decrypterInfo.mainType, peImage, decrypterInfo.peHeader, decrypterInfo.mcKey);

            methodInfos.initializeInfos();

            var methodDef = peImage.DotNetFile.MetaData.TablesStream.MethodTable;

            for (uint rid = 1; rid <= methodDef.Rows; rid++)
            {
                var dm = new DumpedMethod();
                peImage.readMethodTableRowTo(dm, rid);

                var info = methodInfos.lookup(dm.mdRVA);
                if (info == null)
                {
                    continue;
                }

                ushort magic = peImage.readUInt16(dm.mdRVA);
                if (magic != 0xFFF3)
                {
                    continue;
                }

                var mbHeader = MethodBodyParser.parseMethodBody(MemoryImageStream.Create(info.body), out dm.code, out dm.extraSections);
                peImage.updateMethodHeaderInfo(dm, mbHeader);

                dumpedMethods.add(dm);
            }

            return(dumpedMethods);
        }
Esempio n. 14
0
 IEnumerable <MemberDeclarationSyntax> GetStructMemberDeclarations()
 {
     return(NestedTypeInfos.SelectMany(x => x.Declarations)
            .Concat(FieldInfos.SelectMany(x => x.Declarations))
            .Concat(MethodInfos.SelectMany(x => x.Declarations)));
 }
Esempio n. 15
0
        DumpedMethods decryptMethods()
        {
            var dumpedMethods = new DumpedMethods();

            var peImage     = decrypterInfo.peImage;
            var methodInfos = new MethodInfos(decrypterInfo.mainType, peImage, decrypterInfo.peHeader, decrypterInfo.mcKey);

            methodInfos.initializeInfos();

            var  metadataTables  = peImage.Cor20Header.createMetadataTables();
            var  methodDef       = metadataTables.getMetadataType(MetadataIndex.iMethodDef);
            uint methodDefOffset = methodDef.fileOffset;

            for (int i = 0; i < methodDef.rows; i++, methodDefOffset += methodDef.totalSize)
            {
                uint bodyRva = peImage.offsetReadUInt32(methodDefOffset);
                if (bodyRva == 0)
                {
                    continue;
                }

                var info = methodInfos.lookup(bodyRva);
                if (info == null)
                {
                    continue;
                }

                uint   bodyOffset = peImage.rvaToOffset(bodyRva);
                ushort magic      = peImage.offsetReadUInt16(bodyOffset);
                if (magic != 0xFFF3)
                {
                    continue;
                }

                var dm = new DumpedMethod();
                dm.token       = (uint)(0x06000001 + i);
                dm.mdImplFlags = peImage.offsetReadUInt16(methodDefOffset + (uint)methodDef.fields[1].offset);
                dm.mdFlags     = peImage.offsetReadUInt16(methodDefOffset + (uint)methodDef.fields[2].offset);
                dm.mdName      = peImage.offsetRead(methodDefOffset + (uint)methodDef.fields[3].offset, methodDef.fields[3].size);
                dm.mdSignature = peImage.offsetRead(methodDefOffset + (uint)methodDef.fields[4].offset, methodDef.fields[4].size);
                dm.mdParamList = peImage.offsetRead(methodDefOffset + (uint)methodDef.fields[5].offset, methodDef.fields[5].size);

                var  reader = new BinaryReader(new MemoryStream(info.body));
                byte b      = reader.ReadByte();
                if ((b & 3) == 2)
                {
                    dm.mhFlags          = 2;
                    dm.mhMaxStack       = 8;
                    dm.mhCodeSize       = (uint)(b >> 2);
                    dm.mhLocalVarSigTok = 0;
                }
                else
                {
                    reader.BaseStream.Position--;
                    dm.mhFlags          = reader.ReadUInt16();
                    dm.mhMaxStack       = reader.ReadUInt16();
                    dm.mhCodeSize       = reader.ReadUInt32();
                    dm.mhLocalVarSigTok = reader.ReadUInt32();
                    uint codeOffset = (uint)(dm.mhFlags >> 12) * 4;
                    reader.BaseStream.Position += codeOffset - 12;
                }

                dm.code = reader.ReadBytes((int)dm.mhCodeSize);
                if ((dm.mhFlags & 8) != 0)
                {
                    reader.BaseStream.Position = (reader.BaseStream.Position + 3) & ~3;
                    dm.extraSections           = reader.ReadBytes((int)(reader.BaseStream.Length - reader.BaseStream.Position));
                }

                dumpedMethods.add(dm);
            }

            return(dumpedMethods);
        }
Esempio n. 16
0
 public void AddMethodInfo(MethodInfo methodInfo)
 {
     MethodInfos.RemoveAll(x => x.MethodName == methodInfo.MethodName);
     MethodInfos.Add(methodInfo);
 }
Esempio n. 17
0
 public Decrypter(MethodInfos methodInfos, int[] typeToMethod)
 {
     this.methodInfos = methodInfos;
     this.typeToMethod = typeToMethod;
 }
Esempio n. 18
0
        DumpedMethods decryptMethods()
        {
            var dumpedMethods = new DumpedMethods();

            var methodInfos = new MethodInfos(mainType, peImage, peHeader, mcKey);
            methodInfos.initializeInfos();

            var metadataTables = peImage.Cor20Header.createMetadataTables();
            var methodDef = metadataTables.getMetadataType(MetadataIndex.iMethodDef);
            uint methodDefOffset = methodDef.fileOffset;
            for (int i = 0; i < methodDef.rows; i++, methodDefOffset += methodDef.totalSize) {
                uint bodyRva = peImage.offsetReadUInt32(methodDefOffset);
                if (bodyRva == 0)
                    continue;

                var info = methodInfos.lookup(bodyRva);
                if (info == null)
                    continue;

                uint bodyOffset = peImage.rvaToOffset(bodyRva);
                ushort magic = peImage.offsetReadUInt16(bodyOffset);
                if (magic != 0xFFF3)
                    continue;

                var dm = new DumpedMethod();
                dm.token = (uint)(0x06000001 + i);
                dm.mdImplFlags = peImage.offsetReadUInt16(methodDefOffset + (uint)methodDef.fields[1].offset);
                dm.mdFlags = peImage.offsetReadUInt16(methodDefOffset + (uint)methodDef.fields[2].offset);
                dm.mdName = peImage.offsetRead(methodDefOffset + (uint)methodDef.fields[3].offset, methodDef.fields[3].size);
                dm.mdSignature = peImage.offsetRead(methodDefOffset + (uint)methodDef.fields[4].offset, methodDef.fields[4].size);
                dm.mdParamList = peImage.offsetRead(methodDefOffset + (uint)methodDef.fields[5].offset, methodDef.fields[5].size);

                var reader = new BinaryReader(new MemoryStream(info.body));
                byte b = reader.ReadByte();
                if ((b & 3) == 2) {
                    dm.mhFlags = 2;
                    dm.mhMaxStack = 8;
                    dm.mhCodeSize = (uint)(b >> 2);
                    dm.mhLocalVarSigTok = 0;
                }
                else {
                    reader.BaseStream.Position--;
                    dm.mhFlags = reader.ReadUInt16();
                    dm.mhMaxStack = reader.ReadUInt16();
                    dm.mhCodeSize = reader.ReadUInt32();
                    dm.mhLocalVarSigTok = reader.ReadUInt32();
                    uint codeOffset = (uint)(dm.mhFlags >> 12) * 4;
                    reader.BaseStream.Position += codeOffset - 12;
                }

                dm.code = reader.ReadBytes((int)dm.mhCodeSize);
                if ((dm.mhFlags & 8) != 0) {
                    reader.BaseStream.Position = (reader.BaseStream.Position + 3) & ~3;
                    dm.extraSections = reader.ReadBytes((int)(reader.BaseStream.Length - reader.BaseStream.Position));
                }

                dumpedMethods.add(dm);
            }

            return dumpedMethods;
        }
Esempio n. 19
0
 public Decrypter(MethodInfos methodInfos, int[] typeToMethod)
 {
     this.methodInfos  = methodInfos;
     this.typeToMethod = typeToMethod;
 }
Esempio n. 20
0
 public DecrypterV3(MethodInfos methodInfos)
 {
     this.methodInfos = methodInfos;
 }