Example #1
0
        private void LayoutInstanceFields(HtmlWriter writer, Type type)
        {
            var instanceFields = type.GetFields(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);

            Array.Sort(instanceFields, (lhs, rhs) => ReflectionHelper.CompareFields(type, lhs, rhs));
            int split = instanceFields.Length;

            for (int i = 0; i < instanceFields.Length; i++)
            {
                if (instanceFields[i].DeclaringType != type)
                {
                    split = i;
                    break;
                }
            }
            writer.Inline("h4", "Instance Fields");
            if (split > 0)
            {
                LayoutFields(writer, ArrayView(instanceFields, 0, split));
            }
            writer.Inline("h4", "Inherited Fields");
            if (split < instanceFields.Length)
            {
                LayoutFields(writer, ArrayView(instanceFields, split));
            }
        }
Example #2
0
        private void LayoutNestedTypes(HtmlWriter writer, Type type)
        {
            writer.Inline("h4", "Nested Types");
            var nested = type.GetNestedTypes(BindingFlags.Public | BindingFlags.NonPublic);

            MakeTable(
                writer,
                nested,
                t => WriteTypeDeclaration(writer, t)
                );
        }
        private void InspectAssembly(HtmlWriter writer, Assembly asm)
        {
            using (writer.Tag("small")) {
                writer.AHref("Domain", _completePrefix);
            }
            writer.Inline("h2", "Assembly: " + asm.Name);
            writer.Inline("h4", "Namespaces");
            MakeTable(
                writer,
                asm.Namespaces,
                n => NamespaceLink(writer, n, n.RelativeName)
                );
            var unnamed = asm.FindNamespace("");

            if (unnamed != null)
            {
                writer.Inline("h4", "Types");
                InspectNamespace(writer, unnamed);
            }
        }
 private void InspectNamespace(HtmlWriter writer, Namespace ns)
 {
     using (writer.Tag("small")) {
         AssemblyLink(writer, ns.Assembly);
     }
     writer.Inline("h2", ns.FullName);
     MakeTable(
         writer,
         ns.Types,
         t => WriteShortTypeDeclaration(writer, t)
         );
 }
Example #5
0
        void InspectDomain(HtmlWriter writer)
        {
            writer.Inline("h5", AppDomain.CurrentDomain.FriendlyName);
            var assemblies = m_Explorer.Assemblies.ToArray();

            Array.Sort(assemblies, (lhs, rhs) => lhs.FullName.CompareTo(rhs.FullName));
            if (assemblies.Length > 0)
            {
                using (writer.ContainerFluid())
                    using (writer.Tag("code"))
                    {
                        writer.Inline("h6", "// assemblies");
                        MakeCodeList(
                            writer,
                            assemblies,
                            a => AssemblyLink(writer, a),
                            a => writer.Write("    // " + a.FullName)
                            );
                    }
            }
        }
        private void InspectDomain(HtmlWriter writer)
        {
            writer.Inline("h2", "Domain: " + AppDomain.CurrentDomain.FriendlyName);
            var assemblies = _explorer.Assemblies.ToArray();

            Array.Sort(assemblies, (lhs, rhs) => lhs.FullName.CompareTo(rhs.FullName));
            MakeTable(
                writer,
                assemblies,
                a => AssemblyLink(writer, a),
                a => writer.Write(a.FullName)
                );
        }
Example #7
0
        private void InspectAssembly(HtmlWriter writer, Assembly asm)
        {
            using (writer.Tag("small")) {
                DomainLink(writer);
            }
            writer.Inline("h5", asm.Name);

            using (writer.ContainerFluid())
            {
                var namespaces = asm.Namespaces.Where(s => s.Name.Length > 0).ToList();
                if (namespaces.Count > 0)
                {
                    using (writer.ContainerFluid())
                        using (writer.Tag("code"))
                        {
                            writer.Inline("h6", "// namespaces");
                            MakeCodeList(
                                writer,
                                namespaces.OrderBy(n => n.Name),
                                n =>
                            {
                                writer.Write("namespace ");
                                NamespaceLink(writer, n, n.RelativeName);
                            });
                        }
                }

                var unnamed = asm.FindNamespace("");
                if (unnamed != null)
                {
                    using (writer.ContainerFluid())
                        using (writer.Tag("code"))
                        {
                            writer.Inline("h6", "// Root namespace");
                            WriteNamespaceMembers(writer, unnamed);
                        }
                }
            }
        }
        private void LayoutInstanceProperties(HtmlWriter writer, Type type)
        {
            var instanceProperties = type.GetProperties(k_AllInstanceBindings);

            if (instanceProperties.Length == 0)
            {
                return;
            }

            Array.Sort(instanceProperties, (lhs, rhs) => ReflectionHelper.CompareProperties(type, lhs, rhs));
            int split = instanceProperties.Length;

            for (int i = 0; i < instanceProperties.Length; i++)
            {
                if (instanceProperties[i].DeclaringType != type)
                {
                    split = i;
                    break;
                }
            }

            if (split > 0)
            {
                using (writer.ContainerFluid())
                {
                    writer.Inline("h6", "// Instance properties");
                    LayoutProperties(writer, ArrayView(instanceProperties, 0, split));
                }
            }

            if (split < instanceProperties.Length)
            {
                using (writer.ContainerFluid())
                {
                    writer.Inline("h6", "// Inherited properties");
                    LayoutProperties(writer, ArrayView(instanceProperties, split));
                }
            }
        }
        private void LayoutInstanceMethods(HtmlWriter writer, Type type)
        {
            var instanceMethods = type.GetMethods(k_AllInstanceBindings);

            if (instanceMethods.Length == 0)
            {
                return;
            }

            Array.Sort(instanceMethods, (lhs, rhs) => ReflectionHelper.CompareMethods(type, lhs, rhs));
            int split = instanceMethods.Length;

            for (int i = 0; i < instanceMethods.Length; i++)
            {
                if (instanceMethods[i].DeclaringType != type)
                {
                    split = i;
                    break;
                }
            }

            if (split > 0)
            {
                using (writer.ContainerFluid())
                {
                    writer.Inline("h6", "// Instance methods");
                    LayoutMethods(writer, ArrayView(instanceMethods, 0, split).Where(m => !m.IsSpecialName));
                }
            }

            if (split < instanceMethods.Length)
            {
                using (writer.ContainerFluid())
                {
                    writer.Inline("h6", "// Inherited methods");
                    LayoutMethods(writer, ArrayView(instanceMethods, split).Where(m => !m.IsSpecialName));
                }
            }
        }
Example #10
0
        private void InspectClass(HtmlWriter writer, Type type)
        {
            var instanceCtors = type.GetConstructors(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);

            Array.Sort(instanceCtors, (lhs, rhs) => ReflectionHelper.CompareConstructors(type, lhs, rhs));
            writer.Inline("h4", "Constructors");
            LayoutCtors(writer, instanceCtors);

            LayoutInstanceFields(writer, type);
            LayoutInstanceProperties(writer, type);
            LayoutInstanceMethods(writer, type);

            var staticCtor = type.GetConstructors(BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public);

            Array.Sort(instanceCtors, (lhs, rhs) => ReflectionHelper.CompareConstructors(type, lhs, rhs));
            writer.Inline("h4", "Static Constructor");
            LayoutCtors(writer, staticCtor);

            writer.Inline("h4", "Static Fields");
            var staticFields = type.GetFields(BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public);

            Array.Sort(staticFields, (lhs, rhs) => ReflectionHelper.CompareFields(type, lhs, rhs));
            LayoutStaticFields(writer, staticFields);

            writer.Inline("h4", "Static Properties");
            var staticProperties = type.GetProperties(BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public);

            Array.Sort(staticProperties, (lhs, rhs) => ReflectionHelper.CompareProperties(type, lhs, rhs));
            LayoutProperties(writer, staticProperties);

            writer.Inline("h4", "Static Functions");
            var staticMethods = type.GetMethods(BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public);

            Array.Sort(staticMethods, (lhs, rhs) => ReflectionHelper.CompareMethods(type, lhs, rhs));
            LayoutMethods(writer, staticMethods.Where(m => !m.IsSpecialName));

            LayoutNestedTypes(writer, type);
        }
Example #11
0
 void WriteNamespaceMembers(HtmlWriter writer, Namespace ns)
 {
     using (writer.Tag("code"))
     {
         foreach (var group in ns.Types.Where(t => t.DeclaringType == null).GroupBy(t => TypeKinds.Classify(t)).OrderBy(group => group.Key))
         {
             using (writer.ContainerFluid())
             {
                 writer.Inline("h6", "// " + group.Key.KindName());
                 MakeCodeList(
                     writer,
                     group.OrderBy(t => t.Name),
                     t => WriteInlineAttributes(writer, t.GetCustomAttributes(false)),
                     t => WriteShortTypeDeclaration(writer, t)
                     );
             }
         }
     }
 }
        private void LayoutNestedTypes(HtmlWriter writer, Type type)
        {
            var nested = type.GetNestedTypes(BindingFlags.Public | BindingFlags.NonPublic);

            if (nested.Length == 0)
            {
                return;
            }
            using (writer.ContainerFluid())
            {
                writer.Inline("h6", "// Nested types");
                MakeCodeList(
                    writer,
                    nested,
                    t => WriteInlineAttributes(writer, t.GetCustomAttributes(false)),
                    t => WriteTypeDeclaration(writer, t)
                    );
            }
        }
        void ExecuteLookup(HtmlWriter writer, HttpListenerRequest request)
        {
            const string addresses = nameof(addresses);

            using (writer.Tag("form", "action", CommandUrl("lookup"), "method", "post"))
                using (writer.ContainerFluid())
                    using (writer.Tag("div", "class", "form-group"))
                    {
                        writer.Inline("h2", "Paste addresses to look up (hex)");
                        writer.Tag("textarea", "class", "form-control", "name", addresses, "rows", "10").Dispose();
                        writer.Break();
                        writer.InlineTag("input", "type", "submit", "value", "Submit");
                    }

            NameValueCollection postValues;

            using (StreamReader reader = new StreamReader(request.InputStream, request.ContentEncoding))
                postValues = System.Web.HttpUtility.ParseQueryString(reader.ReadToEnd());
            if (postValues[addresses] != null)
            {
                var modules = Process.GetCurrentProcess().Modules;
                string FindModule(long address)
                {
                    for (int i = 0; i < modules.Count; i++)
                    {
                        var  m           = modules[i];
                        long baseAddress = m.BaseAddress.ToInt64();
                        if (baseAddress <= address && address < baseAddress + m.ModuleMemorySize)
                        {
                            return(modules[i].ModuleName);
                        }
                    }
                    return("unknown module");
                }

                using (writer.ContainerFluid())
                {
                    writer.Inline("h4", "Results");
                    var lines = postValues[addresses].Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries);
                    using (writer.Tag("textarea", "class", "form-control", "rows", "10"))
                    {
                        foreach (var line in lines)
                        {
                            writer.Write(line);
                            writer.Write(", ");
                            int start = line.IndexOf("0x");
                            if (start >= 0)
                            {
                                int end = line.IndexOf(',', start);
                                if (end < 0)
                                {
                                    end = line.Length;
                                }
                                var numberString = line.Substring(start + 2, end - start - 2);
                                if (long.TryParse(numberString, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out long address))
                                {
                                    var jitInfo = Mono.GetJitInfo(new IntPtr(address));
                                    if (jitInfo.Method == null)
                                    {
                                        writer.Write("unknown method");
                                    }
                                    else if (jitInfo.Method is MethodInfo m)
                                    {
                                        WriteTypeName(writer, m.DeclaringType, true);
                                        writer.Write(".");
                                        WriteMethodDeclaration(writer, m, true);
                                    }
                                    else if (jitInfo.Method is ConstructorInfo c)
                                    {
                                        WriteCtorDeclaration(writer, c, true);
                                    }
                                    writer.Write(", ");
                                    writer.Write(FindModule(address));
                                }
                                else
                                {
                                    writer.Write("failed to parse " + numberString + ",");
                                }
                            }
                            else
                            {
                                writer.Write("failed to parse,");
                            }


                            writer.Write("\n");
                        }
                    }
                }
            }
        }
        private void InspectClass(HtmlWriter writer, Type type)
        {
            var instanceCtors = type.GetConstructors(k_AllInstanceBindings);

            Array.Sort(instanceCtors, (lhs, rhs) => ReflectionHelper.CompareConstructors(type, lhs, rhs));
            if (instanceCtors.Length > 0)
            {
                using (writer.ContainerFluid())
                {
                    writer.Inline("h6", "// Constructors");
                    LayoutCtors(writer, instanceCtors);
                }
            }

            var staticCtor = type.GetConstructors(k_AllStaticBindings);

            if (staticCtor.Length > 0)
            {
                Array.Sort(staticCtor, (lhs, rhs) => ReflectionHelper.CompareConstructors(type, lhs, rhs));
                using (writer.ContainerFluid())
                {
                    writer.Inline("h6", "// Static constructors");
                    LayoutCtors(writer, staticCtor);
                }
            }

            LayoutInstanceFields(writer, type);

            var staticFields = type.GetFields(k_AllStaticBindings);

            if (staticFields.Length > 0)
            {
                Array.Sort(staticFields, (lhs, rhs) => ReflectionHelper.CompareFields(type, lhs, rhs));
                using (writer.ContainerFluid())
                {
                    writer.Inline("h6", "// Static fields");
                    LayoutStaticFields(writer, staticFields);
                }
            }

            LayoutInstanceProperties(writer, type);

            var staticProperties = type.GetProperties(k_AllStaticBindings);

            if (staticProperties.Length > 0)
            {
                Array.Sort(staticProperties, (lhs, rhs) => ReflectionHelper.CompareProperties(type, lhs, rhs));
                using (writer.ContainerFluid())
                {
                    writer.Inline("h6", "Static properties");
                    LayoutProperties(writer, staticProperties);
                }
            }

            LayoutInstanceMethods(writer, type);

            var staticMethods = type.GetMethods(k_AllStaticBindings);

            if (staticMethods.Length > 0)
            {
                Array.Sort(staticMethods, (lhs, rhs) => ReflectionHelper.CompareMethods(type, lhs, rhs));
                using (writer.ContainerFluid())
                {
                    writer.Inline("h6", "// Static functions");
                    LayoutMethods(writer, staticMethods.Where(m => !m.IsSpecialName));
                }
            }

            LayoutNestedTypes(writer, type);
        }