public void LoadHistory(string path, out int DumpNum, out SearchSize size)
        {
            using (ZipFile zip = ZipFile.Read(path))
            {
                foreach (ZipEntry e in zip)
                {
                    e.Extract("DumpHistory", ExtractExistingFileAction.OverwriteSilently);
                }
                string   comment = zip.Comment;
                string[] split   = comment.Split(':');
                DumpNum = Convert.ToInt32(split[0]);
                switch (split[1])
                {
                case "Bit16": size = SearchSize.Bit16; break;

                case "Bit8": size = SearchSize.Bit8; break;

                case "Single": size = SearchSize.Single; break;

                case "Bit32": size = SearchSize.Bit32; break;

                default: size = SearchSize.Bit32; break;
                }
            }
        }
 public void LoadHistory(string path, out int DumpNum, out SearchSize size)
 {
     int retVal;
     using (ZipFile zip = ZipFile.Read(path))
     {
         foreach (ZipEntry e in zip)
         {
             e.Extract("DumpHistory", ExtractExistingFileAction.OverwriteSilently);  // overwrite == true
         }
         string comment = zip.Comment;
         string[] split = comment.Split(':');
         DumpNum = Convert.ToInt32(split[0]);
         switch (split[1])
         {
             case "Bit16": size = SearchSize.Bit16; break;
             case "Bit8": size = SearchSize.Bit8; break;
             case "Single": size = SearchSize.Single; break;
             case "Bit32": size = SearchSize.Bit32; break;
             default: size = SearchSize.Bit32; break;
         }
         //switch (
         //retVal = zip.Comment;
     }
     //return retVal;
 }
 public void SaveHistory(string path, int DumpNum, SearchSize size)
 {
     using (ZipFile zip = new ZipFile())
     {
         zip.CompressionLevel = Ionic.Zlib.CompressionLevel.None;
         zip.AddDirectory("DumpHistory");
         zip.Comment = DumpNum.ToString() + ":" + size.ToString();
         
         zip.Save(path);
     }
 }
        public void SaveHistory(string path, int DumpNum, SearchSize size)
        {
            using (ZipFile zip = new ZipFile())
            {
                zip.CompressionLevel = Ionic.Zlib.CompressionLevel.None;
                zip.AddDirectory("DumpHistory");
                zip.Comment = DumpNum.ToString() + ":" + size.ToString();

                zip.Save(path);
            }
        }
Exemple #5
0
        public bool LoadSearch(string path, bool compressed)
        {
            int       oldSortedColumn = 0;
            SortOrder oldSortOrder    = SortOrder.Ascending;

            if (gView.SortedColumn != null)
            {
                oldSortedColumn = gView.SortedColumn.Index;
                oldSortOrder    = gView.SortOrder;
            }

            System.Runtime.Serialization.Formatters.Binary.BinaryFormatter serializeResults = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();

            if (!compressed)
            {
                FileStream resultFile = new FileStream(path, FileMode.Open);
                sSize = (SearchSize)serializeResults.Deserialize(resultFile);
                resultFile.Close();
            }
            else
            {
                ZipFile      infile       = ZipFile.Read(path);
                MemoryStream resultStream = new MemoryStream();
                infile["ResList"].Extract(resultStream);
                sSize = (SearchSize)serializeResults.Deserialize(resultStream);
                infile.Dispose();
                resultStream.Close();
                resultStream.Dispose();
            }

            {
                NewSearch         = true;
                nxButton.Enabled  = false;
                prvButton.Enabled = false;
                resLab.Text       = "No results found";
                return(false);
            }
        }
Exemple #6
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);
        }
Exemple #7
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);
        }