コード例 #1
0
        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);
        }
コード例 #2
0
        //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
            });
        }