/[RomCheater]/trunk/RomCheater/Docking/FloatingMemorySearcher.cs
ViewVC logotype

Diff of /trunk/RomCheater/Docking/FloatingMemorySearcher.cs

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 392 by william, Wed Jun 20 10:03:25 2012 UTC revision 395 by william, Wed Jun 20 10:41:25 2012 UTC
# Line 1  Line 1 
1  #define USE_AUTOMATIC_MEMORY_SEARCH_RANGE // when defined will automatically choose the best starting address and size for memory search otherwise it will use the constants defined in MemorySizeConstants  //#define USE_AUTOMATIC_MEMORY_SEARCH_RANGE // when defined will automatically choose the best starting address and size for memory search otherwise it will use the constants defined in MemorySizeConstants
2  #if !USE_AUTOMATIC_MEMORY_SEARCH_RANGE  #if !USE_AUTOMATIC_MEMORY_SEARCH_RANGE
3  #define FORCE_USE_OF_MEMORYSIZECONSTANTS // when defined wil force the use of the constants defined in MemorySizeConstants for memory search range  #define FORCE_USE_OF_MEMORYSIZECONSTANTS // when defined wil force the use of the constants defined in MemorySizeConstants for memory search range
4  #endif  #endif
# Line 1030  namespace RomCheater.Docking Line 1030  namespace RomCheater.Docking
1030              provider.CloseProvider();              provider.CloseProvider();
1031                
1032              if (buffered_mem.Length == 0) { logger.Warn.WriteLine("Buffered Memory is Zero Length."); return; }              if (buffered_mem.Length == 0) { logger.Warn.WriteLine("Buffered Memory is Zero Length."); return; }
1033              //MemoryStream ms = new MemoryStream(buffered_mem);              MemoryStream ms = new MemoryStream(buffered_mem);
1034              //BinaryReader r_ms = new BinaryReader(ms);              BinaryReader r_ms = new BinaryReader(ms);
1035              logger.Debug.WriteLine(string.Format("Buffered Memory Size -> 0x{0:x8}", buffered_mem.Length));              logger.Debug.WriteLine(string.Format("Buffered Memory Size -> 0x{0:x8}", buffered_mem.Length));
1036              int Last_Whole_Percent_Done = 0;              int Last_Whole_Percent_Done = 0;
1037    
# Line 1040  namespace RomCheater.Docking Line 1040  namespace RomCheater.Docking
1040              {              {
1041                  st_first_search.Start();                  st_first_search.Start();
1042                  SearchArgs.Results.Clear();                  SearchArgs.Results.Clear();
1043                  //r_ms.BaseStream.Seek(0, SeekOrigin.Begin);                  r_ms.BaseStream.Seek(0, SeekOrigin.Begin);
1044                  for (uint i = 0; i < buffered_mem.Length; i += STEP_SIZE)                  for (uint i = 0; i < buffered_mem.Length; i += STEP_SIZE)
1045                  {                  {
1046                      ResultType<object> _tmp_result = new ResultType<object>();                      ResultType<object> _tmp_result = new ResultType<object>();
1047                      switch (SearchArgs.DataType)                      switch (SearchArgs.DataType)
1048                      {                      {
1049                          case SearchDataTypes._8bits:                          case SearchDataTypes._8bits:
1050                              if (SearchArgs.IsUnsignedDataType) { _tmp_result = new ResultType<object>(i, buffered_mem[i]); }                              if (SearchArgs.IsUnsignedDataType) { _tmp_result = new ResultType<object>(i, r_ms.ReadByte()); }
1051                              else { _tmp_result = new ResultType<object>(i, buffered_mem[i]); } break;                              else { _tmp_result = new ResultType<object>(i, r_ms.ReadSByte()); } break;
1052                          case SearchDataTypes._16bits:                          case SearchDataTypes._16bits:
1053                              if (SearchArgs.IsUnsignedDataType) { _tmp_result = new ResultType<object>(i, BitConverter.ToUInt16(buffered_mem,(int)i)); }                              if (SearchArgs.IsUnsignedDataType) { _tmp_result = new ResultType<object>(i, r_ms.ReadUInt16()); }
1054                              else { _tmp_result = new ResultType<object>(i,BitConverter.ToInt16(buffered_mem,(int)i)); } break;                              else { _tmp_result = new ResultType<object>(i,r_ms.ReadInt16()); } break;
1055                          case SearchDataTypes._32bits:                          case SearchDataTypes._32bits:
1056                              if (SearchArgs.IsUnsignedDataType) { _tmp_result = new ResultType<object>(i, BitConverter.ToUInt32(buffered_mem,(int)i)); }                              if (SearchArgs.IsUnsignedDataType) { _tmp_result = new ResultType<object>(i, r_ms.ReadUInt32()); }
1057                              else { _tmp_result = new ResultType<object>(i, BitConverter.ToInt32(buffered_mem,(int)i)); } break;                              else { _tmp_result = new ResultType<object>(i, r_ms.ReadInt32()); } break;
1058                          case SearchDataTypes._64bits:                          case SearchDataTypes._64bits:
1059                              if (SearchArgs.IsUnsignedDataType) { _tmp_result = new ResultType<object>(i, BitConverter.ToUInt64(buffered_mem,(int)i)); }                              if (SearchArgs.IsUnsignedDataType) { _tmp_result = new ResultType<object>(i, r_ms.ReadUInt64()); }
1060                              else { _tmp_result = new ResultType<object>(i, BitConverter.ToInt64(buffered_mem,(int)i)); } break;                              else { _tmp_result = new ResultType<object>(i, r_ms.ReadInt64()); } break;
1061                      }                      }
1062                      SearchArgs.Results.Add(_tmp_result);                      SearchArgs.Results.Add(_tmp_result);
1063                      double double_percent_done = 100.0 * (double)((double)i / (double)buffered_mem.Length);                      double double_percent_done = 100.0 * (double)((double)i / (double)buffered_mem.Length);
# Line 1065  namespace RomCheater.Docking Line 1065  namespace RomCheater.Docking
1065                      if (int_percent_done != Last_Whole_Percent_Done && i % ElementsBeforeDisplay == 0)                      if (int_percent_done != Last_Whole_Percent_Done && i % ElementsBeforeDisplay == 0)
1066                      {                      {
1067                          resultsprogress.Value = int_percent_done;                          resultsprogress.Value = int_percent_done;
1068                          //resultsprogress.Message = string.Format(" -> Reading Address: 0x{0:x8}", i);                          resultsprogress.Message = string.Format(" -> Reading Address: 0x{0:x8}", i);
1069                          Last_Whole_Percent_Done = int_percent_done;                          Last_Whole_Percent_Done = int_percent_done;
1070                          //Application.DoEvents();                          //Application.DoEvents();
1071                      }                      }
# Line 1086  namespace RomCheater.Docking Line 1086  namespace RomCheater.Docking
1086              #endregion              #endregion
1087    
1088              #region Subsequent Searches              #region Subsequent Searches
1089              //r_ms.BaseStream.Seek(0, SeekOrigin.Begin);              r_ms.BaseStream.Seek(0, SeekOrigin.Begin);
1090    
1091    
1092              // hack to help with OutOfMemory Exceptions (OldValue and Equal compare will always add all found search results)              // hack to help with OutOfMemory Exceptions (OldValue and Equal compare will always add all found search results)
# Line 1108  namespace RomCheater.Docking Line 1108  namespace RomCheater.Docking
1108                      //second_tmp_Results = new List<ResultType<object>>(SearchArgs.Results.Count * 1024);                      //second_tmp_Results = new List<ResultType<object>>(SearchArgs.Results.Count * 1024);
1109                      ////second_tmp_Results.c                      ////second_tmp_Results.c
1110                      for (int i = 0; i < SearchArgs.Results.Count; i += 1)                      for (int i = 0; i < SearchArgs.Results.Count; i += 1)
1111                      {                      {                        
                         //r_ms.BaseStream.Seek(SearchArgs.Results[i].Address, SeekOrigin.Begin);  
1112                          uint address = SearchArgs.Results[i].Address;                          uint address = SearchArgs.Results[i].Address;
1113                          if (MemoryRangeStart > 0 && !SearchArgs.IsFirstSearch) { address = address - MemoryRangeStart; }                          if (MemoryRangeStart > 0 && !SearchArgs.IsFirstSearch) { address = address - MemoryRangeStart; }
1114                            r_ms.BaseStream.Seek(address, SeekOrigin.Begin);
1115                          switch (SearchArgs.DataType)                          switch (SearchArgs.DataType)
1116                          {                          {
1117                              #region Comparer Support                              #region Comparer Support
# Line 1119  namespace RomCheater.Docking Line 1119  namespace RomCheater.Docking
1119                              case SearchDataTypes._8bits:                              case SearchDataTypes._8bits:
1120                                  if (SearchArgs.IsUnsignedDataType)                                  if (SearchArgs.IsUnsignedDataType)
1121                                  {                                  {
1122                                      byte lookup_value = buffered_mem[address];                                      byte lookup_value = r_ms.ReadByte();
1123                                      _8bit_unsigned_comparer_ comparer = new _8bit_unsigned_comparer_(SearchArgs, SearchArgs.Results[i].Address);                                      _8bit_unsigned_comparer_ comparer = new _8bit_unsigned_comparer_(SearchArgs, address);
1124                                      byte value = 0;                                      byte value = 0;
1125                                      if (SearchArgs.CompareValueType == CompareValueTypes.OldValue)                                      if (SearchArgs.CompareValueType == CompareValueTypes.OldValue)
1126                                      {                                      {
# Line 1145  namespace RomCheater.Docking Line 1145  namespace RomCheater.Docking
1145                                  }                                  }
1146                                  else                                  else
1147                                  {                                  {
1148                                      sbyte lookup_value = (sbyte)buffered_mem[address];                                      sbyte lookup_value = r_ms.ReadSByte();
1149                                      _8bit_signed_comparer_ comparer = new _8bit_signed_comparer_(SearchArgs, SearchArgs.Results[i].Address);                                      _8bit_signed_comparer_ comparer = new _8bit_signed_comparer_(SearchArgs, address);
1150                                      sbyte value = 0;                                      sbyte value = 0;
1151                                      if (SearchArgs.CompareValueType == CompareValueTypes.OldValue)                                      if (SearchArgs.CompareValueType == CompareValueTypes.OldValue)
1152                                      {                                      {
# Line 1173  namespace RomCheater.Docking Line 1173  namespace RomCheater.Docking
1173                              case SearchDataTypes._16bits:                              case SearchDataTypes._16bits:
1174                                  if (SearchArgs.IsUnsignedDataType)                                  if (SearchArgs.IsUnsignedDataType)
1175                                  {                                  {
1176                                      ushort lookup_value = BitConverter.ToUInt16(buffered_mem,(int)address);                                      ushort lookup_value = r_ms.ReadUInt16();
1177                                      _16bit_unsigned_comparer_ comparer = new _16bit_unsigned_comparer_(SearchArgs, SearchArgs.Results[i].Address);                                      _16bit_unsigned_comparer_ comparer = new _16bit_unsigned_comparer_(SearchArgs, address);
1178                                      ushort value = 0;                                      ushort value = 0;
1179                                      if (SearchArgs.CompareValueType == CompareValueTypes.OldValue)                                      if (SearchArgs.CompareValueType == CompareValueTypes.OldValue)
1180                                      {                                      {
# Line 1199  namespace RomCheater.Docking Line 1199  namespace RomCheater.Docking
1199                                  }                                  }
1200                                  else                                  else
1201                                  {                                  {
1202                                      short lookup_value = BitConverter.ToInt16(buffered_mem,(int)address);                                      short lookup_value = r_ms.ReadInt16();
1203                                      _16bit_signed_comparer_ comparer = new _16bit_signed_comparer_(SearchArgs, SearchArgs.Results[i].Address);                                      _16bit_signed_comparer_ comparer = new _16bit_signed_comparer_(SearchArgs, address);
1204                                      short value = 0;                                      short value = 0;
1205                                      if (SearchArgs.CompareValueType == CompareValueTypes.OldValue)                                      if (SearchArgs.CompareValueType == CompareValueTypes.OldValue)
1206                                      {                                      {
# Line 1227  namespace RomCheater.Docking Line 1227  namespace RomCheater.Docking
1227                              case SearchDataTypes._32bits:                              case SearchDataTypes._32bits:
1228                                  if (SearchArgs.IsUnsignedDataType)                                  if (SearchArgs.IsUnsignedDataType)
1229                                  {                                  {
1230                                      uint lookup_value = BitConverter.ToUInt32(buffered_mem,(int)address);                                      uint lookup_value = r_ms.ReadUInt32();
1231                                      _32bit_unsigned_comparer_ comparer = new _32bit_unsigned_comparer_(SearchArgs, SearchArgs.Results[i].Address);                                      _32bit_unsigned_comparer_ comparer = new _32bit_unsigned_comparer_(SearchArgs, address);
1232                                      uint value = 0;                                      uint value = 0;
1233                                      if (SearchArgs.CompareValueType == CompareValueTypes.OldValue)                                      if (SearchArgs.CompareValueType == CompareValueTypes.OldValue)
1234                                      {                                      {
# Line 1253  namespace RomCheater.Docking Line 1253  namespace RomCheater.Docking
1253                                  }                                  }
1254                                  else                                  else
1255                                  {                                  {
1256                                      int lookup_value =BitConverter.ToInt32(buffered_mem,(int)address);                                      int lookup_value = r_ms.ReadInt32();
1257                                      _32bit_signed_comparer_ comparer = new _32bit_signed_comparer_(SearchArgs, SearchArgs.Results[i].Address);                                      _32bit_signed_comparer_ comparer = new _32bit_signed_comparer_(SearchArgs, address);
1258                                      int value = 0;                                      int value = 0;
1259                                      if (SearchArgs.CompareValueType == CompareValueTypes.OldValue)                                      if (SearchArgs.CompareValueType == CompareValueTypes.OldValue)
1260                                      {                                      {
# Line 1281  namespace RomCheater.Docking Line 1281  namespace RomCheater.Docking
1281                              case SearchDataTypes._64bits:                              case SearchDataTypes._64bits:
1282                                  if (SearchArgs.IsUnsignedDataType)                                  if (SearchArgs.IsUnsignedDataType)
1283                                  {                                  {
1284                                      ulong lookup_value = BitConverter.ToUInt64(buffered_mem,(int)address);                                      ulong lookup_value = r_ms.ReadUInt64();
1285                                      _64bit_unsigned_comparer_ comparer = new _64bit_unsigned_comparer_(SearchArgs, SearchArgs.Results[i].Address);                                      _64bit_unsigned_comparer_ comparer = new _64bit_unsigned_comparer_(SearchArgs, address);
1286                                      ulong value = 0;                                      ulong value = 0;
1287                                      if (SearchArgs.CompareValueType == CompareValueTypes.OldValue)                                      if (SearchArgs.CompareValueType == CompareValueTypes.OldValue)
1288                                      {                                      {
# Line 1307  namespace RomCheater.Docking Line 1307  namespace RomCheater.Docking
1307                                  }                                  }
1308                                  else                                  else
1309                                  {                                  {
1310                                      long lookup_value = BitConverter.ToInt64(buffered_mem,(int)address);                                      long lookup_value = r_ms.ReadInt64();
1311                                      _64bit_signed_comparer_ comparer = new _64bit_signed_comparer_(SearchArgs, SearchArgs.Results[i].Address);                                      _64bit_signed_comparer_ comparer = new _64bit_signed_comparer_(SearchArgs, address);
1312                                      long value = 0;                                      long value = 0;
1313                                      if (SearchArgs.CompareValueType == CompareValueTypes.OldValue)                                      if (SearchArgs.CompareValueType == CompareValueTypes.OldValue)
1314                                      {                                      {
# Line 1339  namespace RomCheater.Docking Line 1339  namespace RomCheater.Docking
1339                          if (int_percent_done != Last_Whole_Percent_Done && i % ElementsBeforeDisplay == 0)                          if (int_percent_done != Last_Whole_Percent_Done && i % ElementsBeforeDisplay == 0)
1340                          {                          {
1341                              resultsprogress.Value = int_percent_done;                              resultsprogress.Value = int_percent_done;
1342                              //resultsprogress.Message = string.Format(" -> Reading Address: 0x{0:x8}", i);                              resultsprogress.Message = string.Format(" -> Reading Address: 0x{0:x8}", i);
1343                              Last_Whole_Percent_Done = int_percent_done;                              Last_Whole_Percent_Done = int_percent_done;
1344                              //Application.DoEvents();                              //Application.DoEvents();
1345                          }                          }
# Line 1362  namespace RomCheater.Docking Line 1362  namespace RomCheater.Docking
1362                      {                      {
1363                          uint address = SearchArgs.Results[i].Address;                          uint address = SearchArgs.Results[i].Address;
1364                          if (MemoryRangeStart > 0 && !SearchArgs.IsFirstSearch) { address = address - MemoryRangeStart; }                          if (MemoryRangeStart > 0 && !SearchArgs.IsFirstSearch) { address = address - MemoryRangeStart; }
1365                          //r_ms.BaseStream.Seek(SearchArgs.Results[i].Address, SeekOrigin.Begin);                          //r_ms.BaseStream.Seek(address, SeekOrigin.Begin);
1366                          if (SearchArgs.CompareType == SearchCompareTypes.Between)                          if (SearchArgs.CompareType == SearchCompareTypes.Between)
1367                          {                          {
1368                              InRangeComparer comparer = new InRangeComparer(address, 0);                              InRangeComparer comparer = new InRangeComparer(address, 0);
# Line 1392  namespace RomCheater.Docking Line 1392  namespace RomCheater.Docking
1392                          if (int_percent_done != Last_Whole_Percent_Done && i % ElementsBeforeDisplay == 0)                          if (int_percent_done != Last_Whole_Percent_Done && i % ElementsBeforeDisplay == 0)
1393                          {                          {
1394                              resultsprogress.Value = int_percent_done;                              resultsprogress.Value = int_percent_done;
1395                              //resultsprogress.Message = string.Format(" -> Reading Address: 0x{0:x8}", i);                              resultsprogress.Message = string.Format(" -> Reading Address: 0x{0:x8}", i);
1396                              Last_Whole_Percent_Done = int_percent_done;                              Last_Whole_Percent_Done = int_percent_done;
1397                              //Application.DoEvents();                              //Application.DoEvents();
1398                          }                          }
# Line 1414  namespace RomCheater.Docking Line 1414  namespace RomCheater.Docking
1414                  second_tmp_Results = null; // free memory                  second_tmp_Results = null; // free memory
1415              }              }
1416    
1417              //r_ms.Close();              r_ms.Close();
1418          }          }
1419    
1420          private void SearchWorkerThread_ProgressChanged(object sender, ProgressChangedEventArgs e)          private void SearchWorkerThread_ProgressChanged(object sender, ProgressChangedEventArgs e)

Legend:
Removed from v.392  
changed lines
  Added in v.395

  ViewVC Help
Powered by ViewVC 1.1.22