Skip to content

Commit 30ad5e9

Browse files
committed
Added ScanValueType.Regex.
1 parent 0bb9d3b commit 30ad5e9

File tree

5 files changed

+41
-13
lines changed

5 files changed

+41
-13
lines changed

ReClass.NET/Forms/ScannerForm.cs

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -456,6 +456,7 @@ private void OnCompareTypeChanged()
456456
case ScanValueType.Double:
457457
case ScanValueType.ArrayOfBytes:
458458
case ScanValueType.String:
459+
case ScanValueType.Regex:
459460
isHexCheckBox.Checked = false;
460461
enableHexCheckBox = false;
461462
break;
@@ -487,6 +488,7 @@ private void OnValueTypeChanged()
487488
case ScanValueType.Double:
488489
case ScanValueType.ArrayOfBytes:
489490
case ScanValueType.String:
491+
case ScanValueType.Regex:
490492
isHexCheckBox.Checked = false;
491493
isHexCheckBox.Enabled = false;
492494
break;
@@ -508,7 +510,7 @@ private void OnValueTypeChanged()
508510
fastScanAlignmentTextBox.Text = alignment.ToString();
509511

510512
floatingOptionsGroupBox.Visible = valueType == ScanValueType.Float || valueType == ScanValueType.Double;
511-
stringOptionsGroupBox.Visible = valueType == ScanValueType.String;
513+
stringOptionsGroupBox.Visible = valueType == ScanValueType.String || valueType == ScanValueType.Regex;
512514
}
513515

514516
/// <summary>
@@ -518,7 +520,7 @@ private void SetValidCompareTypes()
518520
{
519521
var compareType = compareTypeComboBox.SelectedValue;
520522
var valueType = valueTypeComboBox.SelectedValue;
521-
if (valueType == ScanValueType.ArrayOfBytes || valueType == ScanValueType.String)
523+
if (valueType == ScanValueType.ArrayOfBytes || valueType == ScanValueType.String || valueType == ScanValueType.Regex)
522524
{
523525
compareTypeComboBox.SetAvailableValues(ScanCompareType.Equal);
524526
}
@@ -814,16 +816,22 @@ int CalculateSignificantDigits(string input, NumberFormatInfo numberFormat)
814816

815817
return new ArrayOfBytesMemoryComparer(pattern);
816818
}
817-
else if (settings.ValueType == ScanValueType.String)
819+
else if (settings.ValueType == ScanValueType.String || settings.ValueType == ScanValueType.Regex)
818820
{
819821
if (string.IsNullOrEmpty(dualValueBox.Value1))
820822
{
821823
throw new InvalidInputException(dualValueBox.Value1);
822824
}
823825

824826
var encoding = encodingUtf8RadioButton.Checked ? Encoding.UTF8 : encodingUtf16RadioButton.Checked ? Encoding.Unicode : Encoding.UTF32;
825-
826-
return new StringMemoryComparer(dualValueBox.Value1, encoding, caseSensitiveCheckBox.Checked);
827+
if (settings.ValueType == ScanValueType.String)
828+
{
829+
return new StringMemoryComparer(dualValueBox.Value1, encoding, caseSensitiveCheckBox.Checked);
830+
}
831+
else
832+
{
833+
return new RegexStringMemoryComparer(dualValueBox.Value1, encoding, caseSensitiveCheckBox.Checked);
834+
}
827835
}
828836

829837
throw new InvalidOperationException();
@@ -858,6 +866,7 @@ private static void FindWhatInteractsWithSelectedRecord(MemoryRecord record, boo
858866
size = record.ValueLength;
859867
break;
860868
case ScanValueType.String:
869+
case ScanValueType.Regex:
861870
size = record.ValueLength;
862871
break;
863872
default:

ReClass.NET/MemoryScanner/Comparer/RegexStringMemoryComparer.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,15 @@ public class RegexStringMemoryComparer : IComplexScanComparer
1313

1414
public Encoding Encoding { get; }
1515

16-
public RegexStringMemoryComparer(string pattern, Encoding encoding)
16+
public RegexStringMemoryComparer(string pattern, Encoding encoding, bool caseSensitive)
1717
{
18-
Pattern = new Regex(pattern, RegexOptions.Singleline | RegexOptions.Compiled);
18+
var options = RegexOptions.Singleline | RegexOptions.Compiled;
19+
if (!caseSensitive)
20+
{
21+
options |= RegexOptions.IgnoreCase;
22+
}
23+
24+
Pattern = new Regex(pattern, options);
1925

2026
Encoding = encoding;
2127
}

ReClass.NET/MemoryScanner/MemoryRecord.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using System;
1+
using System;
22
using System.ComponentModel;
33
using System.Diagnostics.Contracts;
44
using System.Globalization;
@@ -102,6 +102,7 @@ public MemoryRecord(ScanResult result)
102102
ValueStr = FormatValue(byteData);
103103
break;
104104
case ScanValueType.String:
105+
case ScanValueType.Regex:
105106
var strResult = (StringScanResult)result;
106107
ValueLength = strResult.Value.Length;
107108
Encoding = strResult.Encoding;
@@ -177,6 +178,7 @@ public void RefreshValue(RemoteProcess process)
177178
buffer = new byte[ValueLength];
178179
break;
179180
case ScanValueType.String:
181+
case ScanValueType.Regex:
180182
buffer = new byte[ValueLength * Encoding.GuessByteCountPerChar()];
181183
break;
182184
default:
@@ -209,6 +211,7 @@ public void RefreshValue(RemoteProcess process)
209211
ValueStr = FormatValue(buffer);
210212
break;
211213
case ScanValueType.String:
214+
case ScanValueType.Regex:
212215
ValueStr = FormatValue(Encoding.GetString(buffer));
213216
break;
214217
}

ReClass.NET/MemoryScanner/ScanResultStore.cs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using System;
1+
using System;
22
using System.Collections.Generic;
33
using System.Diagnostics.Contracts;
44
using System.IO;
@@ -206,8 +206,16 @@ private ScanResult ReadScanResult(BinaryReader br)
206206
result = new ArrayOfBytesScanResult(br.ReadBytes(br.ReadInt32()));
207207
break;
208208
case ScanValueType.String:
209-
var encoding = br.ReadInt32();
210-
result = new StringScanResult(br.ReadString(), encoding == 0 ? Encoding.UTF8 : encoding == 1 ? Encoding.Unicode : Encoding.UTF32);
209+
case ScanValueType.Regex:
210+
var encoding = br.ReadInt32() switch
211+
{
212+
0 => Encoding.UTF8,
213+
1 => Encoding.Unicode,
214+
_ => Encoding.UTF32
215+
};
216+
var value = br.ReadString();
217+
218+
result = valueType == ScanValueType.String ? new StringScanResult(value, encoding) : new RegexStringScanResult(value, encoding);
211219
break;
212220
default:
213221
throw new ArgumentOutOfRangeException();

ReClass.NET/MemoryScanner/ScanValueType.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using System.ComponentModel;
1+
using System.ComponentModel;
22

33
namespace ReClassNET.MemoryScanner
44
{
@@ -19,6 +19,8 @@ public enum ScanValueType
1919
[Description("Array of Bytes")]
2020
ArrayOfBytes,
2121
[Description("String")]
22-
String
22+
String,
23+
[Description("Regular Expression")]
24+
Regex
2325
}
2426
}

0 commit comments

Comments
 (0)