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); }
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)); }
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); }
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); }
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); }