예제 #1
0
        public IntPtr Scan(IntPtr baseAddress, int size, string signature)
        {
            if (!MemoryService.GetIsProcessAlive())
            {
                return(IntPtr.Zero);
            }

            byte?[]? needle = this.SigToNeedle(signature);

            // Fast
            byte[] bigBuffer = new byte[size];
            MemoryService.Read(baseAddress, bigBuffer, size);

            unsafe
            {
                for (long offset = 0; offset < size - needle.Length; offset++)
                {
                    if (this.IsMatch(needle, bigBuffer, offset))
                    {
                        UIntPtr ptr = new UIntPtr(Convert.ToUInt64(baseAddress.ToInt64() + offset));
                        return((IntPtr)ptr.ToPointer());
                    }
                }
            }

            throw new KeyNotFoundException($"Can't find a signature of {signature}");
        }