Exemplo n.º 1
0
        public override void Parse(VoidPtr address)
        {
            MoveDefLookupOffsetNode o;
            bint* addr = First;
            VoidPtr current = BaseAddress + *addr++;
            VoidPtr next = BaseAddress + *addr++;
            int size = 0;
            for (int i = 1; i < Count; i++)
            {
                size = (int)next - (int)current;
                (o = new MoveDefLookupOffsetNode()).Initialize(this, current, size);
                if (_root._lookupSizes.ContainsKey(o.DataOffset))
                    if (_root._lookupSizes[o.DataOffset].DataSize < o.DataSize)
                        _root._lookupSizes[o.DataOffset] = o;
                    else { }
                else
                    _root._lookupSizes.Add(o.DataOffset, o);
                current = next;
                next = BaseAddress + *addr++;
            }
            size = ((int)_offset - (int)(current - BaseAddress));
            (o = new MoveDefLookupOffsetNode()).Initialize(this, current, size);

            if (!_root._lookupSizes.ContainsKey(o.DataOffset))
                _root._lookupSizes.Add(o.DataOffset, o);

            //Sorting by data offset will allow us to get the exact size of every entry!
            Children.Sort(MoveDefLookupOffsetNode.LookupCompare);
        }
Exemplo n.º 2
0
        public override void OnPopulate()
        {
            MoveDefLookupOffsetNode o;
            bint *  addr    = First;
            VoidPtr current = BaseAddress + *addr++;
            VoidPtr next    = BaseAddress + *addr++;
            int     size    = 0;

            for (int i = 1; i < Count; i++)
            {
                size = (int)next - (int)current;
                (o = new MoveDefLookupOffsetNode()).Initialize(this, current, size);
                if (Root._lookupSizes.ContainsKey(o.DataOffset))
                {
                    if (Root._lookupSizes[o.DataOffset].DataSize < o.DataSize)
                    {
                        Root._lookupSizes[o.DataOffset] = o;
                    }
                    else
                    {
                    }
                }
                else
                {
                    Root._lookupSizes.Add(o.DataOffset, o);
                }

                current = next;
                next    = BaseAddress + *addr++;
            }

            size = (int)_offset - (int)(current - BaseAddress);
            (o = new MoveDefLookupOffsetNode()).Initialize(this, current, size);

            if (!Root._lookupSizes.ContainsKey(o.DataOffset))
            {
                Root._lookupSizes.Add(o.DataOffset, o);
            }

            //Sorting by data offset will allow us to get the exact size of every entry!
            Children.Sort(MoveDefLookupOffsetNode.LookupCompare);
        }