private static bool TestSecondaryPattern(Process proc, PatternRecord pattern, long rdramStart) { var ptr = pattern.Address; for (int i = 0; i < pattern.Length; i += 4) { uint value = (uint)ReadProcessInt32(proc, (IntPtr)(rdramStart + ptr.Offset + i), out _); if (value != pattern.Pattern[i / 4]) { return(false); } } return(true); }
//public static void Serialize(SearchSignature signature, string path) //{ // List<PatternRecord> patterns = new List<PatternRecord>(); // foreach (var (ptr, value) in signature.Verification) // { // var record = new PatternRecord() // { // length = 4, // addr = ptr, // primary = false, // data = new uint[] { value } // }; // patterns.Add(record); // } // patterns.Add(new PatternRecord() // { // length = signature.Pattern.Length * 4, // addr = signature.Address, // primary = true, // data = signature.Pattern // }); // MemoryStream ms = new MemoryStream(); // using (BinaryWriter bw = new BinaryWriter(ms)) // { // foreach (var pattern in patterns) // { // pattern.Serialize(bw); // } // } // File.WriteAllBytes(path, ms.ToArray()); //} public static SearchSignature Deserialize(string path) { List <PatternRecord> patterns = new List <PatternRecord>(); using (BinaryReader br = new BinaryReader(File.OpenRead(path))) { while (true) { var pattern = PatternRecord.Deserialize(br); if (pattern.IsPrimaryPattern) { break; } } } return(new SearchSignature() { _patterns = patterns }); }