В настоящее время я пытаюсь заставить работать мою функцию readProcessMemory, и я получаю сообщение об ошибке "Attempted to read or write protected memory. This is often an indication that other memory is corrupt
." Я пытался решить это, но я просто не могу это сделать. Я прочитал другие форумы и темы, чтобы решить проблему, и ничего не помогло. Я пытался просто прочитать целочисленную переменную в тестовой программе, чтобы убедиться, что она работает, но изначально я пробовал ее в блокноте и штурмовом кубе, но ничего не помогло.
Вот мой код:
const int PROCESS_VM_READ = 0x0010;
#region imports
[DllImport("kernel32.dll")]
public static extern IntPtr OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId);
[DllImport("kernel32.dll")]
public static extern bool ReadProcessMemory(int hProcess,
Int64 lpBaseAddress, byte[] lpBuffer, UInt64 dwSize, out IntPtr lpNumberOfBytesRead);
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, UInt32 dwSize, out IntPtr lpNumberOfBytesWritten);
#endregion
private static IntPtr processHandle;
static void Main(string[] args)
{
Console.WriteLine(readInt(0x003CECC4));
Console.Read();
}
static byte[] readMemory(int memoryAddress, int bytesToRead)
{
Process process = Process.GetProcessesByName("test")[0];
processHandle = OpenProcess(PROCESS_VM_READ, false, process.Id);
IntPtr bytesRead;
byte[] buffer = new byte[bytesToRead];
ReadProcessMemory((int)processHandle, memoryAddress, buffer, (uint)buffer.Length, out bytesRead);
return buffer;
}
static int readInt(int memoryAddress)
{
return BitConverter.ToInt32(readMemory(memoryAddress, 4), 0);
}
}
}