コード例 #1
0
        public void SortResults()
        {
            SearchResultComparer comparer = new SearchResultComparer();

            comparer.sortedColumn = gView.SortedColumn.Index;
            if (gView.SortOrder == SortOrder.Descending)
            {
                comparer.descending = true;
            }

            comparer.oldDump = oldDump;
            comparer.newDump = newDump;

            resultAddressList.Sort(comparer);

            PrintPageAlt();
        }
コード例 #2
0
        public bool Search(uint sAddress, uint eAddress, uint lValue, uint hValue,
                           bool useHValue, SearchType sType, SearchSize sSize, ComparisonType cType,
                           uint differentBy)
        {
            blockDump = false;

            resLab.Text = "Searching";
            byte bufferlength = 0;

            switch (sSize)
            {
            case (SearchSize.Bit8): bufferlength = 1; break;

            case (SearchSize.Bit16): bufferlength = 2; break;

            default: bufferlength = 4; break;
            }

            bool floatCompare = sSize == SearchSize.Single;

            int                  oldSortedColumn = 0;
            SortOrder            oldSortOrder    = SortOrder.Ascending;
            SearchResultComparer comparer        = new SearchResultComparer();

            if (gView.SortedColumn != null)
            {
                oldSortedColumn = gView.SortedColumn.Index;
                oldSortOrder    = gView.SortOrder;
            }
            if (oldSortedColumn != 0 || oldSortOrder != SortOrder.Ascending)
            {
                comparer.sortedColumn = 0;
                comparer.descending   = false;
                resultAddressList.Sort(comparer);
            }

            this.sSize = sSize;

            bool doBlockSearch = false;
            bool doCompare     = false;

            Dump searchDump = newDump;
            uint dumpStart, dumpEnd, dumpOffset;

            dumpStart  = sAddress;
            dumpEnd    = eAddress;
            dumpOffset = 0;

            if (NewSearch || (UnknownStart && sType == SearchType.Exact))
            {
                InitialSearch = true;
                dumpNum       = 0;

                if (newDump != null)
                {
                    newDump = null;
                }
                resultAddressList.Clear();
                if (oldDump != null)
                {
                    oldDump = null;
                }

                if (sType == SearchType.Exact)
                {
                    doCompare = true;
                }
                else
                {
                    UnknownLAddress = sAddress;
                    UnknownHAddress = eAddress;
                    UnknownStart    = true;
                    NewSearch       = false;
                }
            }
            else
            {
                InitialSearch = false;
                doCompare     = true;
                if (UnknownStart)
                {
                    dumpStart  = Math.Max(UnknownLAddress, sAddress);
                    dumpEnd    = Math.Min(UnknownHAddress, eAddress);
                    dumpOffset = dumpStart - UnknownLAddress;
                }
                else
                {
                    doBlockSearch = true;
                }
            }

            if (undoDump != null)
            {
            }
            undoDump = oldDump;
            oldDump  = newDump;

            if (undoList != resultAddressList)
            {
                undoList.Clear();
            }
            undoList = resultAddressList;

            try
            {
                if (doBlockSearch)
                {
                    uint startAddress, endAddress;
                    int  startAddressIndex, endAddressIndex;
                    FindPairs(sAddress, eAddress, bufferlength, out startAddress, out endAddress, out startAddressIndex, out endAddressIndex);
                    List <DumpRange> dumpRanges = FindDumpRanges(startAddress, bufferlength, startAddressIndex, endAddressIndex);
                    newDump = new Dump(startAddress, endAddress, dumpNum);
                    PerformBlockSearch(newDump, dumpRanges);
                }
                else
                {
                    newDump = new Dump(dumpStart, dumpEnd, dumpNum);
                    gecko.Dump(newDump);
                }
            }
            catch (ETCPGeckoException e)
            {
                exceptionHandling.HandleException(e);
            }

            if (doCompare)
            {
                if (sType != SearchType.Exact && sType != SearchType.Diff)
                {
                    hValue    = 0;
                    useHValue = false;
                }

                uint val, cmpVal;
                cmpVal = lValue;

                if (resultAddressList.Count > 0)
                {
                    List <uint> tempAddressList = new List <uint>();
                    foreach (uint compareAddress in resultAddressList)
                    {
                        val = newDump.ReadAddress(compareAddress, bufferlength);
                        if (sType == SearchType.Unknown)
                        {
                            cmpVal = oldDump.ReadAddress(compareAddress, bufferlength);
                        }
                        else if (sType == SearchType.Old)
                        {
                            cmpVal = undoDump.ReadAddress(compareAddress, bufferlength);
                        }
                        else if (sType == SearchType.Diff)
                        {
                            val = val - oldDump.ReadAddress(compareAddress, bufferlength);
                        }

                        if (Compare(val, cmpVal, hValue, useHValue, cType, differentBy, floatCompare))
                        {
                            tempAddressList.Add(compareAddress);
                        }
                    }

                    resultAddressList = tempAddressList;
                }
                else
                {
                    for (uint i = newDump.StartAddress; i < newDump.EndAddress; i += bufferlength)
                    {
                        val = newDump.ReadAddress(i, bufferlength);
                        if (sType != SearchType.Exact)
                        {
                            cmpVal = oldDump.ReadAddress(i, bufferlength);
                        }

                        if (Compare(val, cmpVal, hValue, useHValue, cType, differentBy, floatCompare))
                        {
                            resultAddressList.Add(i);
                        }
                    }
                }
            }


            if (UnknownStart && !InitialSearch)
            {
                UnknownStart = false;
            }

            dumpNum++;


            if (resultAddressList.Count == 0 && !UnknownStart)
            {
                NewSearch         = true;
                nxButton.Enabled  = false;
                prvButton.Enabled = false;
                resLab.Text       = "No results found";
                Reset();
                return(false);
            }

            NewSearch = false;

            UpdateGridViewPage(true);

            return(true);
        }
コード例 #3
0
        public bool SearchRefactored(uint sAddress, uint eAddress, List <SearchComparisonInfo> comparisons, SearchSize searchSize, uint val)
        {
            blockDump = false;

            resLab.Text = "Searching";
            byte bufferlength = 0;

            switch (searchSize)
            {
            case (SearchSize.Bit8): bufferlength = 1; break;

            case (SearchSize.Bit16): bufferlength = 2; break;

            default: bufferlength = 4; break;
            }

            this.sSize = searchSize;

            bool floatCompare = searchSize == SearchSize.Single;

            int                  oldSortedColumn = 0;
            SortOrder            oldSortOrder    = SortOrder.Ascending;
            SearchResultComparer comparer        = new SearchResultComparer();

            if (gView.SortedColumn != null)
            {
                oldSortedColumn = gView.SortedColumn.Index;
                oldSortOrder    = gView.SortOrder;
            }
            if (oldSortedColumn != 0 || oldSortOrder != SortOrder.Ascending)
            {
                comparer.sortedColumn = 0;
                comparer.descending   = false;
                resultAddressList.Sort(comparer);
            }

            SearchType sType = comparisons[0].searchType;

            bool doBlockSearch = false;
            bool doCompare     = false;

            Dump searchDump = newDump;
            uint dumpStart, dumpEnd, dumpOffset;

            dumpStart  = sAddress;
            dumpEnd    = eAddress;
            dumpOffset = 0;

            if (NewSearch || (UnknownStart && sType == SearchType.Exact))
            {
                InitialSearch = true;
                dumpNum       = 0;

                if (newDump != null)
                {
                    newDump = null;
                }
                resultAddressList.Clear();
                if (oldDump != null)
                {
                    oldDump = null;
                }

                if (sType == SearchType.Exact)
                {
                    doCompare = true;
                }
                else
                {
                    UnknownLAddress = sAddress;
                    UnknownHAddress = eAddress;
                    UnknownStart    = true;
                    NewSearch       = false;
                }
            }
            else
            {
                InitialSearch = false;
                doCompare     = true;
                if (UnknownStart)
                {
                    dumpStart  = Math.Max(UnknownLAddress, sAddress);
                    dumpEnd    = Math.Min(UnknownHAddress, eAddress);
                    dumpOffset = dumpStart - UnknownLAddress;
                }
                else
                {
                    doBlockSearch = true;
                }
            }

            undoDump = oldDump;
            oldDump  = newDump;
            undoList = resultAddressList;

            if (doBlockSearch)
            {
                uint startAddress, endAddress;
                int  startAddressIndex, endAddressIndex;
                FindPairs(dumpStart, dumpEnd, bufferlength, out startAddress, out endAddress, out startAddressIndex, out endAddressIndex);
                List <DumpRange> dumpRanges = FindDumpRanges(startAddress, bufferlength, startAddressIndex, endAddressIndex);
                newDump = new Dump(startAddress, endAddress, dumpNum);
                PerformBlockSearch(newDump, dumpRanges);
            }
            else
            {
                newDump = new Dump(dumpStart, dumpEnd, dumpNum);
                SafeDump(dumpStart, dumpEnd, newDump);
            }

            if (doCompare)
            {
                uint cmpVal;
                cmpVal = comparisons[0].value;

                if (resultAddressList.Count > 0)
                {
                    List <uint> tempAddressList = new List <uint>();
                    foreach (uint compareAddress in resultAddressList)
                    {
                        uint newDumpVal = newDump.ReadAddress(compareAddress, bufferlength);
                        uint oldDumpVal = oldDump.ReadAddress(compareAddress, bufferlength);
                        uint UndoDumpVal;
                        if (undoDump != null)
                        {
                            UndoDumpVal = undoDump.ReadAddress(compareAddress, bufferlength);
                        }
                        else
                        {
                            UndoDumpVal = oldDumpVal;
                        }
                        if (CompareRefactored(newDumpVal, oldDumpVal, UndoDumpVal, comparisons, floatCompare))
                        {
                            tempAddressList.Add(compareAddress);
                        }
                    }

                    resultAddressList = tempAddressList;
                }
                else
                {
                    for (uint i = newDump.StartAddress; i < newDump.EndAddress; i += bufferlength)
                    {
                        uint newDumpVal  = newDump.ReadAddress(i, bufferlength);
                        uint oldDumpVal  = newDumpVal;
                        uint UndoDumpVal = newDumpVal;
                        if (sType != SearchType.Exact)
                        {
                            oldDumpVal  = oldDump.ReadAddress(i, bufferlength);
                            UndoDumpVal = oldDumpVal;
                        }

                        if (CompareRefactored(newDumpVal, oldDumpVal, UndoDumpVal, comparisons, floatCompare))
                        {
                            resultAddressList.Add(i);
                        }
                    }
                }
            }

            if (UnknownStart && !InitialSearch)
            {
                UnknownStart = false;
            }

            dumpNum++;

            if (resultAddressList.Count == 0 && !UnknownStart)
            {
                DialogResult result      = MessageBox.Show(null, "No search results!\n\nTo undo, press Yes\nTo restart, press No", "No search results!", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation);
                bool         UndoSuccess = false;
                if (result == DialogResult.Yes)
                {
                    UndoSuccess = UndoSearch();
                    if (!UndoSuccess)
                    {
                        MessageBox.Show("Could not undo!  Restarting search");
                    }
                }

                if (!UndoSuccess)
                {
                    NewSearch         = true;
                    nxButton.Enabled  = false;
                    prvButton.Enabled = false;
                    resLab.Text       = "No results found";
                    Reset();
                    return(false);
                }
            }

            NewSearch = false;

            UpdateGridViewPage(true);

            return(true);
        }