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