示例#1
0
        /// <summary>
        /// returns the Root of the UITree.
        /// </summary>
        /// <param name="MemoryReader"></param>
        /// <returns></returns>
        static public UITreeNode UIRoot(
            IPythonMemoryReader MemoryReader)
        {
            var CandidateAddresses = PyTypeObject.EnumeratePossibleAddressesOfInstancesOfPythonTypeFilteredByObType(MemoryReader, "UIRoot");

            var CandidatesWithChildrenCount = new List <KeyValuePair <UITreeNode, int> >();

            foreach (var CandidateAddress in CandidateAddresses)
            {
                var Candidate = new UITreeNode(CandidateAddress, MemoryReader);

                int CandidateChildrenCount = 0;

                {
                    var CandidateChildren = Candidate.EnumerateChildrenTransitive(MemoryReader);

                    if (null != CandidateChildren)
                    {
                        CandidateChildrenCount = CandidateChildren.Count();
                    }
                }

                CandidatesWithChildrenCount.Add(new KeyValuePair <UITreeNode, int>(Candidate, CandidateChildrenCount));
            }

            //	return the candidate the most children nodes where found in.
            return
                (CandidatesWithChildrenCount
                 .OrderByDescending((CandidateWithChildrenCount) => CandidateWithChildrenCount.Value)
                 .FirstOrDefault()
                 .Key);
        }
示例#2
0
        public void OutputToFile(string path)
        {
            List <string> data = new List <string>();

            try
            {
                ReadRootNode();

                if (RootNode == null)
                {
                    return;
                }
                else
                {
                    data.Add("UIRoot found at " + RootNode.BaseAddress.ToString("x"));
                    data.Add("");
                }

                var AllNodes =
                    new UITreeNode[] { RootNode }
                .Concat(RootNode.EnumerateChildrenTransitive(PyMemoryReader)).ToArray();

                //	show off the spoils....
                foreach (var Node in AllNodes)
                {
                    data.Add("==================================================================================");
                    data.Add("= UITree Node at " + Node.BaseAddress.ToString("x"));
                    data.Add("==================================================================================");
                    data.Add("");

                    var Dict = Node.Dict;

                    if (null == Dict)
                    {
                        continue;
                    }

                    var DictSlots = Dict.Slots;

                    if (null == DictSlots)
                    {
                        continue;
                    }

                    int itterator = 0;

                    //	show info for each entry in dict that has a String as Key.
                    foreach (var Entry in DictSlots)
                    {
                        var EntryKeyStr = Entry.KeyStr;

                        if (null == EntryKeyStr)
                        {
                            continue;
                        }

                        var          me_value   = Entry.me_value;
                        PyObject     obj        = new PyObject(me_value.Value, MemoryReader);
                        PyTypeObject typeObject = obj.LoadType(PyMemoryReader);

                        data.Add
                        (
                            itterator +
                            " : " +
                            Entry.BaseAddress.ToString("x") +
                            " + Entry[\"" +
                            EntryKeyStr +
                            "\"].Value(" +
                            GetTypeName(me_value) +
                            ") = " +
                            (me_value.HasValue ? GetStringValueFromObject(obj) : "null")
                        );

                        if (GetTypeName(me_value) == "list")
                        {
                            uint[] items = ((PyList)ReadValue(me_value)).Items;

                            if (items == null)
                            {
                                continue;
                            }

                            foreach (uint address in items)
                            {
                                obj = new PyObject(address, MemoryReader);
                                String type = GetTypeName(obj);

                                data.Add("+ List Item: (" + type + ") = " + GetStringValueFromObject(obj));
                            }
                        }

                        itterator += 1;
                    }

                    data.Add("");
                }

                System.IO.File.WriteAllLines(path, data.ToArray());
            }
            finally
            {
            }
        }
示例#3
0
        public MemoryManager()
        {
            try
            {
                // Prep:
                RootNode = null;
                Nodes    = new Dictionary <long, MemoryNode>();

                ReadRootNode();
                if (RootNode == null)
                {
                    return;
                }

                var AllNodes =
                    new UITreeNode[] { RootNode }
                .Concat(RootNode.EnumerateChildrenTransitive(PyMemoryReader)).ToArray();

                //	show off the spoils....
                foreach (var Node in AllNodes)
                {
                    MemoryNode memNode = new MemoryNode();
                    memNode.BaseAddress = Node.BaseAddress;

                    var Dict = Node.Dict;

                    if (null == Dict)
                    {
                        continue;
                    }

                    var DictSlots = Dict.Slots;

                    if (null == DictSlots)
                    {
                        continue;
                    }

                    //	show info for each entry in dict that has a String as Key.
                    foreach (var Entry in DictSlots)
                    {
                        var EntryKeyStr = Entry.KeyStr;

                        if (null == EntryKeyStr)
                        {
                            continue;
                        }

                        var          me_value   = Entry.me_value;
                        PyTypeObject typeObject = new PyObject(me_value.Value, MemoryReader).LoadType(PyMemoryReader);

                        MemoryDictEntry memEntry = new MemoryDictEntry(Entry.BaseAddress, EntryKeyStr, GetTypeName(me_value), ReadValue(me_value));
                        memNode.AddMemoryDictEntry(memEntry);
                    }

                    Nodes.Add(memNode.BaseAddress, memNode);
                }
            }
            finally
            {
            }
        }