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); }
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)); }
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); }