Пример #1
0
        /// <summary>
        /// Search Hex String
        /// </summary>
        /// <param name="pattern">The pattern you are searching for</param>
        /// <param name="startDumpOffset">The Offset you want to start dump from</param>
        /// <returns></returns>
        public BindingList<SearchResults> SearchHexString(byte[] pattern, uint startDumpOffset)
        {
            var buffer = new byte[_fStream.Length];
            _fStream.Read(buffer, 0, (int) _fStream.Length);
            int i = IndexOfInt(buffer, pattern[0], 0);
            var positions = new BindingList<SearchResults>();

            int x = 1;
            while (i >= 0 && i <= buffer.Length - pattern.Length)
            {
                if (_stopSearch) return positions;
                ReportProgress(0, buffer.Length, i, "Searching...");

                var segment = new byte[pattern.Length];
                Buffer.BlockCopy(buffer, i, segment, 0, pattern.Length);

                if (ByteArrayCompare(segment, pattern))
                {
                    var results = new SearchResults();
                    results.Offset = String.Format("{0:X}", startDumpOffset + (uint) i);

                    var hex = new StringBuilder(segment.Length*2);
                    foreach (byte b in segment)
                        hex.AppendFormat("{0:x2}", b);

                    results.Value = hex.ToString().ToUpper();
                    results.ID = x.ToString();
                    positions.Add(results);

                    //if (positions.Count == 1000) return positions;
                    if (_stopSearch) return positions;
                    i = IndexOfInt(buffer, pattern[0], i + pattern.Length);
                    x++;
                }
                else
                {
                    if (_stopSearch) return positions;
                    i = IndexOfInt(buffer, pattern[0], i + 1);
                }
                if (_stopSearch) return positions;
            }
            return positions;
        }
Пример #2
0
        //Refresh results Thread
        private void RefreshResultList()
        {
            try
            {
                EnableControl(resultRefreshButton, false);
                var newSearchResults = new BindingList<SearchResults>();
                var limitSearchResults = new BindingList<SearchResults>();
                int value = 0;
                string retvalue = "";

                if (_searchResult.Count > 500)
                {
                    string results = _rtm.Peek(_tempOffset, _tempLength, _tempOffset, _tempLength);

                    _readWriter = new RwStream();
                    try
                    {
                        byte[] _buffer = Functions.HexToBytes(results);
                        _readWriter.WriteBytes(_buffer, 0, _buffer.Length);

                        _readWriter.Flush();
                        _readWriter.Position = 0;
                    }
                    catch (Exception ex)
                    {
                        throw new Exception(ex.Message);
                    }
                }

                foreach (SearchResults item in _searchResult)
                {
                    UpdateProgressbar(0, _searchResult.Count, value, "Refreshing...");

                    string length = (item.Value.Length/2).ToString("X");
                    if (_searchResult.Count > 500)
                    {
                        //var retvalue = this._rtm.
                        uint pos = uint.Parse(item.Offset, NumberStyles.AllowHexSpecifier);
                        uint spos = uint.Parse(_tempOffset, NumberStyles.AllowHexSpecifier);
                        _readWriter.Position = (pos - spos);
                        byte[] _value = _readWriter.ReadBytes((item.Value.Length/2));
                        retvalue = Functions.ToHexString(_value);
                    }
                    else
                    {
                        retvalue = _rtm.Peek(item.Offset, length, item.Offset, length);
                    }

                    uint currentResults;
                    uint newResult;

                    if (!uint.TryParse(item.Value, out currentResults))
                        throw new Exception("Invalid Search Value this function only works for Unsigned Integers.");
                    uint.TryParse(retvalue, out newResult);

                    //===================================================
                    //Default
                    if (defaultRadioButton.Checked)
                    {
                        if (item.Value == retvalue) continue; //if value hasn't change continue for each loop
                        if (value < 1000)
                        {
                            GridRowColours(value);
                        }
                        item.Value = retvalue;
                    }
                    else if (ifEqualsRadioButton.Checked)
                    {
                        if (newResult == currentResults)
                        {
                            var searchResultItem = new SearchResults
                                                       {
                                                           ID = item.ID,
                                                           Offset = item.Offset,
                                                           Value = retvalue
                                                       };
                            newSearchResults.Add(searchResultItem);
                        }
                    }
                    else if (ifGreaterThanRadioButton.Checked)
                    {
                        if (newResult > currentResults)
                        {
                            var searchResultItem = new SearchResults
                                                       {
                                                           ID = item.ID,
                                                           Offset = item.Offset,
                                                           Value = retvalue
                                                       };
                            newSearchResults.Add(searchResultItem);
                        }
                    }
                    else if (ifLessThanRadioButton.Checked)
                    {
                        if (newResult < currentResults)
                        {
                            var searchResultItem = new SearchResults
                                                       {
                                                           ID = item.ID,
                                                           Offset = item.Offset,
                                                           Value = retvalue
                                                       };
                            newSearchResults.Add(searchResultItem);
                        }
                    }
                    else if (ifLessThanRadioButton.Checked)
                    {
                        if (newResult != currentResults)
                        {
                            var searchResultItem = new SearchResults
                                                       {
                                                           ID = item.ID,
                                                           Offset = item.Offset,
                                                           Value = retvalue
                                                       };
                            newSearchResults.Add(searchResultItem);
                        }
                    }
                    else if (ifChangeRadioButton.Checked)
                    {
                        if (item.Value != retvalue)
                        {
                            var searchResultItem = new SearchResults
                                                       {
                                                           ID = item.ID,
                                                           Offset = item.Offset,
                                                           Value = retvalue
                                                       };
                            newSearchResults.Add(searchResultItem);
                        }
                    }

                    value++;
                }
                if (defaultRadioButton.Checked)
                {
                    ResultGridUpdate();
                    ResultCountBoxUpdate();
                }
                else
                {
                    _searchResult = newSearchResults;
                    for (int i = 0; i < _searchResult.Count; i++)
                    {
                        if (i >= 1000)
                            break;

                        limitSearchResults.Add(_searchResult[i]);
                    }

                    _searchLimitedResult = limitSearchResults;
                    ResultGridUpdate();
                    ResultCountBoxUpdate();
                }
                UpdateProgressbar(0, 100, 0, "idle");
            }
            catch (Exception ex)
            {
                ShowMessageBox(ex.Message, string.Format("Peek Poker"), MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            finally
            {
                EnableControl(resultRefreshButton, true);
                UpdateProgressbar(0, 100, 0, "idle");
                Thread.CurrentThread.Abort();
            }
        }