Beispiel #1
0
        public static T Deserialize <T>(Process process, IntPtr baseAddress)
            where T : struct
        {
            var output = (object)new T();

            ProcessQuery.ReadProcessMemory(process.hProcess, baseAddress, output, (IntPtr)Marshal.SizeOf(typeof(T)), out _);
            return((T)output);
        }
Beispiel #2
0
        public static string ReadCString(Process process, IntPtr baseAddress)
        {
            IEnumerable <Byte> bytes = new List <Byte>();
            int offset = 0;
            int length = -1;

            do
            {
                var tempBytes = new byte[256];
                ProcessQuery.ReadProcessMemory(process.hProcess, (IntPtr)baseAddress + offset, tempBytes, (IntPtr)256, out _);
                bytes   = bytes.Concat(tempBytes);
                offset += 256;
                length  = Array.FindIndex(bytes.ToArray(), 0, (x) => x == 0);
            }while (length == -1);
            return(Encoding.GetEncoding(0).GetString(bytes.ToArray(), 0, length));
        }
Beispiel #3
0
        public IEnumerable <IntPtr> ScanRegion(IntPtr baseAddress, ulong regionSize, float value)
        {
            var buffer  = new float[regionSize / sizeof(float)];
            var offsets = new List <IntPtr>();

            ProcessQuery.ReadProcessMemory(hProcess, baseAddress, buffer, (IntPtr)regionSize, out IntPtr numBytesRead);

            for (long offset = 0; offset < (long)numBytesRead / sizeof(float); offset++)
            {
                var calculatedOffset = (long)baseAddress + (offset * sizeof(float));
                if (value == buffer[offset])
                {
                    offsets.Add(new IntPtr(calculatedOffset));
                }
            }

            return(offsets);
        }