Exemplo n.º 1
0
        public List <int> SearchOffsets(OffsetSearchParams searchParams, Memory memory)
        {
            Contract.Assume(searchParams != null);
            Contract.Assume(searchParams.StructureBytes != null);
            Contract.Assume(_subStructSearch != null);
            Contract.Assume(memory != null);

            if (searchParams.PossiblePointers == null)
            {
                searchParams.PossiblePointers = Helpers.SearchPossiblePointers(searchParams.StructureBytes, searchParams.StructAddress);
            }

            var result = new List <int>();

            foreach (var searchParamsPossiblePointer in searchParams.PossiblePointers)
            {
                if (_checkVMT && !searchParamsPossiblePointer.HasVMT)
                {
                    continue;
                }

                var bytes           = memory.ReadBytes(searchParamsPossiblePointer.PointerAddress, _subStructSize);
                var subSearchParams = new OffsetSearchParams(bytes, searchParamsPossiblePointer.PointerAddress);

                if (_subStructSearch.Search(subSearchParams, memory))
                {
                    result.Add(searchParamsPossiblePointer.Offset);
                }
            }

            FoundOffsets.AddRange(result);
            return(result);
        }
        public unsafe List <int> SearchOffsets(OffsetSearchParams searchParams, Memory memory)
        {
            var result = new List <int>();

            var data = new ValueReaderData
            {
                DataArray = searchParams.StructureBytes
            };

            fixed(void *ptr = searchParams.StructureBytes)
            {
                var intPtr = (byte *)ptr;

                for (var i = 0; i < searchParams.StructureBytes.Length - Alignment; i += Alignment)
                {
                    data.DataArrayPos = i;
                    data.Ptr          = intPtr;

                    if (_valueCompare.Compare(data))
                    {
                        result.Add(i);
                    }

                    intPtr += Alignment;
                }
            }

            FoundOffsets.AddRange(result);
            return(result);
        }
Exemplo n.º 3
0
        public bool Search(OffsetSearchParams searchParams, Memory memory)
        {
            var offsetGroups = new List <List <int> >();

            foreach (var offsetSearch in _offsetSearches)
            {
                var offsetGroup = offsetSearch.SearchOffsets(searchParams, memory);
                offsetGroups.Add(offsetGroup);
            }

            return(_offsetsFilter.Pass(offsetGroups));
        }
Exemplo n.º 4
0
        public List <int> SearchOffsets(OffsetSearchParams searchParams, Memory memory)
        {
            if (_source.FoundOffsets.Count == 1)
            {
                return(new List <int> {
                    _source.FoundOffsets[0] + _applyOffset
                });
            }

            if (_source.FoundOffsets.Count > 1)
            {
                return(new List <int>());
            }

            return(_source.FoundOffsets);
        }
Exemplo n.º 5
0
        public List <int> SearchOffsets(OffsetSearchParams searchParams, Memory memory)
        {
            var results = _subSearch.SearchOffsets(searchParams, memory);

            if (results.Count != _expectedOffsetsCount)
            {
                return(new List <int>());
            }

            var selectedOffset = results[_selectOffsetOnIndex];

            FoundOffsets.Add(selectedOffset);
            return(new List <int> {
                selectedOffset
            });
        }
        public List <int> SearchOffsets(OffsetSearchParams searchParams, Memory memory)
        {
            Contract.Assume(searchParams != null);
            Contract.Assume(searchParams.StructureBytes != null);
            Contract.Assume(_valueComparer != null);
            Contract.Assume(memory != null);

            //if (searchParams.StructAddress == 0x00000058946BDE60)
            //{
            //    var t = 0;
            //}

            if (searchParams.PossiblePointers == null)
            {
                searchParams.PossiblePointers = Helpers.SearchPossiblePointers(searchParams.StructureBytes, searchParams.StructAddress);
            }

            var result = new List <int>();

            foreach (var searchParamsPossiblePointer in searchParams.PossiblePointers)
            {
                if (_checkVMT && !searchParamsPossiblePointer.HasVMT)
                {
                    continue;
                }

                if (_valueComparer.Compare(searchParamsPossiblePointer))
                {
                    result.Add(searchParamsPossiblePointer.Offset);

                    if (FirstFound)
                    {
                        break;
                    }
                }
            }

            FoundOffsets.AddRange(result);
            return(result);
        }
Exemplo n.º 7
0
 public List <int> SearchOffsets(OffsetSearchParams searchParams, Memory memory)
 {
     return(new List <int> {
         0
     });
 }
 public bool Search(OffsetSearchParams searchParams, Memory memory)
 {
     FoundOffsets = _offsetSearch.SearchOffsets(searchParams, memory);
     return(FoundOffsets.Count > 0);
 }